我是MVC新手并且混淆了<Input type="Checkbox">
,@HTML.CheckBox
和@HTML.CheckBoxFor
的区别。
你能指导为什么两个助手都提供相同的东西吗?在哪种情况下应该使用哪一种?
由于
编辑:
添加了输入type=checkbox
答案 0 :(得分:6)
<Input type="Checkbox">
是复选框的Html标记,@Html.CheckBox
&amp; @HTML.CheckBoxFor
是Razor视图引擎的Html Helpers ..
假设您的viewmodel具有属性Person.HadDinner
,那么通常为了使模型绑定正常工作,您必须将复选框Person.HadDinner
命名为id Person_HadDinner
。
你可以使用@Html.CheckBox
之类的
@HTML.CheckBox("Person.HadDinner", Model.Person.HadDinner)
但如果您使用的是@HTML.CheckBoxFor
,则会强烈输入..
@HTML.CheckBoxFor(x => x.Person.HadDinner)
在这两种情况下,最终输出标记都是
<input type="checkbox" id="Person_HadDinner" name="Person.HadDinner">
答案 1 :(得分:2)
CheckboxFor(MSDN)
返回对象中每个属性的复选框输入元素 由表达式表示。
这意味着为所提供的表达式中的每个属性创建了一个复选框元素。复选框(MSDN)
的位置使用指定的HTML帮助器返回复选框输入元素 和表单字段的名称。
这将创建一个简单的Checkbox元素,并提供(可选)属性。
通常,当引用对象(或视图模型)的属性时,最理想的技术是使用CheckboxFor,因为复选框将根据您的模型正确格式化。
希望这有帮助。
编辑:对OP变更的回应。
CheckboxFor和Checkbox都会生成标准的HTML输出,如下所示。
@Html.CheckboxFor(m => m.SomeProperty)
<input type="checkbox" name="SomeProperty" id="SomeProperty" />
@Html.Checkbox("SomeProperty")
<input type="checkbox" name="SomeProperty" id="SomeProperty" />
辅助方法只生成满足帮助程序中定义的表达式和属性所需的HTML。
此外,您不必使用帮助程序。您可以根据需要直接编写HTML元素。