不,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 中,您通常会执行以下操作:
if(isset($_POST['checkboxValue'])) {
$checkboxVal = $_POST['checkboxValue'];
}
ASP.NET MVC 会自动将传入的帖子数据绑定到您的操作参数,如下所示:
[HttpPost]
public ActionResult Submit(bool checkboxValue){
}
它通过检查参数名称(checkboxValue)与发布数据数组键的名称匹配,并且类型也匹配来做到这一点。例如,如果您要将上述 checkboxValue 从 boolean 更改为 string 并更改名称,则 ASP.NET MVC 的模型绑定将无法将属性与发布数据匹配,并且不会自动设置为您带来价值。
还值得注意的是,ASP.NET MVC 的模型绑定不知道您是如何创建复选框的。
HTML.CheckBox 和 HTML.CheckBoxFor html 帮助器纯粹是一种使您更容易创建 HTML 的方法。如果您自己手动编写 HTML,那么模型绑定器仍将成功绑定提交的数据。
编辑:
正如@DrinkBird 非常正确地指出的那样,您还可以通过使用FormCollection 实例来访问表单的所有帖子数据,如下所示:
[HttpPost]
public ActionResult Submit(FormCollection postData){
}
此集合表示发布到 Submit 操作的所有数据。