我在这个表单中有一个包含很多复选框的网页:
@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}。
知道发生了什么事吗?
答案 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;
}