System.FormatException:字符串未被识别为有效的布尔值

问题描述:

我正在使用ASP.NET MVC webform并尝试获取用户选中的复选框的值。运行应用程序时会抛出异常和服务器错误diplayed从控制器下面的代码行:System.FormatException:字符串未被识别为有效的布尔值

supp = Convert.ToBoolean(checksupp); 

我已经在调试模式和复选框值获得通过运行Visual Studio,但正显示出以下异常:

字符串未被识别为有效的布尔值。

模型,视图和控制器如下所示,不知道如何解决此问题。

型号

public class WebFormXML{ 

    private List<string> suppressions; 

    public WebFormXML() 
    { 
     suppressions = new List<string>(); 
    } 

    public List<string> Suppressions 
    { 
     get { return suppressions; } 
     set { suppressions = value; } 
    } 

{ 

查看

<input type="checkbox" groupname="suppressions" name="suppressions" id="supp1" value="Prepayments" runat="server" /> 

控制器

[HttpPost] 
    public ActionResult createXML(FormCollection collection) 
    WebFormXML wfx = new WebFormXML(); 
    string checksupp = collection["suppressions"]; 
    bool supp = true; 
    supp = Convert.ToBoolean(checksupp); 
    wfx.Suppressions.Add(checksupp); 
+0

什么让你觉得checksupp是一个布尔值? –

出现这种情况的,因为你希望阅读的价值实际上是“预付账款”,而不是可以被转换为布尔值(例如“真”或“假”)。

复选框提交

复选框在默认情况下将只提交检查的值,所以你应该不需要执行任何其他检查,看看是否有其他的选择进行了检查。如果您需要处理多个可能的选择,只需通过您的托运选项迭代,并添加它们:

[HttpPost] 
public ActionResult createXML(FormCollection collection) 
{ 
    // Build your WebForm object 
    WebFormXML wfx = new WebFormXML(); 
    // Get your suppressed items 
    var suppressions = collection["suppressions"].Split(','); 
    // Add each of them to your object 
    wfx.Suppressions.AddRange(suppressions); 

    // Other code here 
} 

enter image description here

你可以看到一个very basic working example of this demonstrated here及下方观察:

控制器

[HttpPost] 
public ActionResult Index(FormCollection collection) 
{ 
    // Get your suppressed elements (they will come in as a comma-delimited string) 
    var suppressions = collection["suppressions"]; 
    return Content("Properties: [" + suppressions + "] were suppressed."); 
} 

查看

@using (Html.BeginForm()) 
{ 
    <b>A</b> 
    <input type="checkbox" groupname="suppressions" name="suppressions" value="A" /> 
    <b>B</b> 
    <input type="checkbox" groupname="suppressions" name="suppressions" value="B" /> 
    <b>C</b> 
    <input type="checkbox" groupname="suppressions" name="suppressions" value="C" /> 
    <br /> 
    <button type="submit">Check Suppressions</button> 
} 
+0

谢谢你这个简单的例子,我能够从这里开始构建,它解决了我的问题。 – r1993

+0

当Web应用安全扫描器试图向表单中提供一些垃圾数据时,我得到了这个错误。 – nmit026

在您的代码:

string checksupp = collection["suppressions"]; 

它返回checksupp =“预付款”。

Convert.ToBoolean(value); //value only true or false 

,并与您的代码是:

Convert.ToBoolean("Prepayments"); // -> error 
+1

这正确地确定了问题,但您是否也可以为此提供可能的解决方案?提问者正在寻找解决问题的办法。 –