【发布时间】:2012-05-18 10:36:31
【问题描述】:
我正在尝试实现 this answer suggests,但没有将显示名称存储在我的模型代码中,所以我认为这是一个单独的问题。
我有一个 MVC 视图
<%@ Page Language="C#" MasterPageFile="PathToMaster" Inherits="System.Web.Mvc.ViewPage<ModelData>" %>
还有一个模型:
public class ModelData {
public bool Option1 { get; set; }
}
我有一个带有 HTML 标记的 .aspx,用于包含复选框的表单:
<label for="MyCheckbox">Your choice</label>
<%= Html.CheckBoxFor(Model=>Model.Option1, new { id="Option1", @class="checkbox", onchange="return myValidation();", name="MyCheckbox", value="Option one" } ) %>
当它被编译时会产生这个 HTML:
<label for="MyCheckbox">Your choice</label>
<input class="checkbox" id="Option1" name="Option1" onchange="return myValidation();" type="checkbox" value="Option one" /><input name="Option1" type="hidden" value="false" />
每当我选中复选框并提交表单控制器操作时
class MyController : Controller {
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult RequestStuff( ModelData data )
{
}
}
接收data,其中Option1 是false。
我做错了什么?如何使复选框映射到模型成员?
【问题讨论】:
-
我不太确定
Html.CheckBoxFor(Model=>Model.Option1)是否正确,可能 lambda 变量不应该命名为Model,这是当前模型的别名,我不知道'不知道它是否会覆盖别名。Html.CheckBoxFor(item => item.Option1)看起来更好,虽然我不确定它是否是问题的根源。顺便说一句,视图生成的'Id'将对应您的属性名称,值将对应于值,因此您不必自己设置它。而“价值”很可能只能是真/假,而不是“我的价值”:) -
顺便说一句,我通常避免在使用帮助程序时添加自定义 HTML 选项,例如弄乱 DOM 元素的 ID 会破坏你的绑定。我添加的最多的是
new { @class = "MyAwesomeStyle"}。其他所有内容(呈现的描述、值等)都是通过准备视图模型、注释等来处理的。 -
@相信我 - 我是一名医生:
item会是什么? -
一个 lambda 表达式变量,随意命名。本质上,它捕获传递给视图的模型,因此在编写
item => item.之后,您将获得模型元素的 Intellisense :) Html 助手处理表达式,因此是 lambda 语句。 -
@相信我 - 我是一名医生:这种改变根本没有帮助。
标签: c# .net asp.net-mvc iis model