未能获取控制器上的复选框值

时间:2013-09-18 22:06:11

标签: asp.net-mvc-4 razor

我在这个表单中有一个包含很多复选框的网页:

@using (Html.BeginForm("PerformDiagnostic", "Tests", FormMethod.Post))
{
   (...)
   @Html.CheckBox("Something01", false)<span>Something 01</span><br />
   @Html.CheckBox("Something02", false)<span>Something 02</span><br />
   (...)
   <input type="submit" value="Submit" />
}

当我按下提交按钮时,我将所有复选框状态传递给具有以下签名的控制器:

    public ActionResult DoSomeTasks(FormCollection form)
    {
        int isSomething01Checked= Convert.ToInt32(form["Something01"]);
        int isSomething02Checked= Convert.ToInt32(form["Something02"]);

        ....
    }

在控制器中我想知道每个复选框是否已选中或未选中,但问题是表单[“SomethingXX”]返回类似{true,false}的内容,但它没有告诉我它的当前状态(已检查或未选中)。还有什么返回形式[“SomethingXX”]无法转换。

我已经检查过,如果选中复选框,则表单[“SomethingXX”]返回{true,false},如果未选中,则表单[“SomethingXX”]返回{false},我不明白为什么选中复选框时正在返回{true,false}而不是{true}。

知道发生了什么事吗?

1 个答案:

答案 0 :(得分:3)

也许我错过了一些东西,但似乎你不必要地围绕MVC模式做最后的运行,因此错过了预定义模型绑定的便利性。为什么不创建强类型模型?

public class ViewModel
{
    [Display(Name="Something 01")]
    public bool Something01 { get; set; }

    [Display(Name="Something 02")]
    public bool Something02 { get; set; }
}

然后使用HTML帮助程序为模型属性生成复选框:

@Html.CheckBoxFor(model => model.Something01)
@Html.CheckBoxFor(model => model.Something02)

现在控制器代码很简单。只需调用视图模型类型:

public ActionResult DoSomeTasks(ViewModel model)
{
    bool isSomething01Checked = model.Something01;
    bool isSomething02Checked = model.Something02;
}