【问题标题】:System.FormatException: String was not recognized as a valid BooleanSystem.FormatException:字符串未被识别为有效的布尔值
【发布时间】:2016-09-13 21:05:51
【问题描述】:

我正在处理一个 ASP.NET MVC 网络表单并尝试获取用户选中的复选框的值。运行应用程序时会引发异常,并在控制器的以下代码行中显示服务器错误:

 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);

【问题讨论】:

  • 是什么让你认为 checksupp 是一个布尔值?

标签: c# asp.net asp.net-mvc


【解决方案1】:

发生这种情况是因为您希望读取的值实际上是“预付款”,而不是可以转换为布尔值的值(例如“true”或“false”)。

复选框提交

默认情况下,复选框只会提交选中的值,因此您不需要执行任何其他检查来查看是否选中了其他选项。如果您需要处理多个可能的选择,只需遍历选中的选项并添加它们:

[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>
}   

【讨论】:

  • 感谢您提供的简单示例,我可以从中构建并解决了我的问题。
  • 当网络应用安全扫描程序尝试将一些垃圾数据输入表单时,我收到了这个错误。
【解决方案2】:

在您的代码中:

string checksupp = collection["suppressions"];

它返回 checksupp = "Prepayments"。

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

你的代码是:

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

【讨论】:

  • 这可以正确识别问题,但您能否提供一个可能的解决方案?提问者正在寻找问题的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
相关资源
最近更新 更多