1

我有一个网页,在这种形式的视图中有很多复选框:

@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"]);

        ....
    }

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

我已经检查过,如果选中了复选框,则 form["SomethingXX"] 返回 {true,false},如果未选中,则 form["SomethingXX"] 返回 {false},我不明白为什么选中复选框时返回 { true,false} 而不是 {true}。

知道发生了什么吗?

4

1 回答 1

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;
}
于 2013-09-18T23:07:34.173 回答