输入类型的差异= Checkbox,@ HTML.CheckBox和@HTML.CheckBoxFor?

时间:2014-01-03 03:54:52

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 razor razor-2

我是MVC新手并且混淆了<Input type="Checkbox">@HTML.CheckBox@HTML.CheckBoxFor的区别。

你能指导为什么两个助手都提供相同的东西吗?在哪种情况下应该使用哪一种?

由于

编辑: 添加了输入type=checkbox

2 个答案:

答案 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元素。