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);
答
出现这种情况的,因为你希望阅读的价值实际上是“预付账款”,而不是可以被转换为布尔值(例如“真”或“假”)。
复选框提交
复选框在默认情况下将只提交检查的值,所以你应该不需要执行任何其他检查,看看是否有其他的选择进行了检查。如果您需要处理多个可能的选择,只需通过您的托运选项迭代,并添加它们:
[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
}
例
你可以看到一个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>
}
答
在您的代码:
string checksupp = collection["suppressions"];
它返回checksupp =“预付款”。
Convert.ToBoolean(value); //value only true or false
,并与您的代码是:
Convert.ToBoolean("Prepayments"); // -> error
+1
这正确地确定了问题,但您是否也可以为此提供可能的解决方案?提问者正在寻找解决问题的办法。 –
什么让你觉得checksupp是一个布尔值? –