[HttpPost]
public ActionResult Submit(FormCollection postData){
}
此集合表示发布到 Submit 操作的所有数据 .
3
是的,模型绑定应该允许您在提交时检索复选框的值 .
如果你的模型看起来像:
public class myModel
{
public bool myBool {get; set;}
}
在您的HTML中,您已经使用了帮助程序
@Html.CheckBoxFor(m => m.myBool)
然后在您的帖子操作中处理提交:
[HttpPost]
public ActionResult MyAction(myModel model)
{
var whatsThis = model.myBool;
}
如果选中复选框,则 whatsThis 将为true,否则为false .
部分原因在于,当你使用 @html.CheckBoxFor 时,它还会放置一个隐藏的表单字段,如果未选中该框,则会传递false,以帮助进行模型绑定 - 如果它在post-vars集合中提交的话,则不会提交't, per HTTP there would be no varibalbe ' myBool .
2 回答
不,ASP.NET MVC在提交后不记得复选框值 . 作为一个HTTP应用程序,一旦ASP.NET MVC呈现HTML,它就会结束请求并忘记它刚刚完成的所有操作 . 然后,在提交表单时,ASP.NET MVC会处理传入的HTTP请求,并通过其模型绑定将其映射到您的模型(更多关于它如何在一瞬间完成此操作) .
我自己来自PHP背景,这是我在使用ASP.NET MVC时始终遇到的问题之一 .
使用ASP.NET MVC,您必须记住您在完整框架的上下文中工作,并且为了确保您尽可能高效,ASP.NET MVC将为您处理许多平凡的工作 - ASP.NET MVC的模型绑定就是一个很好的例子 .
提交表单时,ASP.NET MVC框架将解析所有传入的帖子数据,并尝试通过控制器操作自动将其映射到您提供的值 .
因此,在PHP中,您通常会执行以下操作:
ASP.NET MVC会自动将传入的post数据绑定到action参数,如下所示:
它通过检查与post数据数组键匹配的参数名称(
checkboxValue
)来确定,并且该类型也匹配 . 例如,如果您要将上述checkboxValue从boolean
更改为string
并更改名称,则ASP.NET MVC的模型绑定将无法将该属性与发布数据匹配,并且不会自动为您设置该值 .值得注意的是,ASP.NET MVC的模型绑定不知道您是如何创建复选框的 .
HTML.CheckBox
和HTML.CheckBoxFor
html助手纯粹是一种让您更容易创建HTML的方法 . 如果您自己手动编写HTML,那么模型 Binders 仍将成功绑定提交的数据 .Edit:
正如@DrinkBird非常正确地指出的那样,你使用
FormCollection
实例发布数据,如下所示:此集合表示发布到
Submit
操作的所有数据 .是的,模型绑定应该允许您在提交时检索复选框的值 .
如果你的模型看起来像:
在您的HTML中,您已经使用了帮助程序
然后在您的帖子操作中处理提交:
如果选中复选框,则
whatsThis
将为true,否则为false .部分原因在于,当你使用
@html.CheckBoxFor
时,它还会放置一个隐藏的表单字段,如果未选中该框,则会传递false,以帮助进行模型绑定 - 如果它在post-vars集合中提交的话,则不会提交't, per HTTP there would be no varibalbe ' myBool .如果将此模型返回到表单中(例如,如果它未验证),则表单将在提交时的状态下重新显示该复选框: