use*_*794 11 c# entity razor asp.net-mvc-3
我正在尝试为我添加"名称"属性CheckBoxFor,但无法让它工作.
@Html.CheckBoxFor(
model => model.ProvidePracticalSuggestions,
new { @name = "help_practicalSuggestions"
})
Run Code Online (Sandbox Code Playgroud)
知道我在这里做错了什么吗?
呈现的HTML:
<div>
<input data-val="true" data-val-required="The Provide practical suggestions for implementing change, e.g. step-by-step best practices field is required." id="ProvidePracticalSuggestions" name="ProvidePracticalSuggestions" type="checkbox" value="true" /><input name="ProvidePracticalSuggestions" type="hidden" value="false" />
<span class="field-validation-valid" data-valmsg-for="ProvidePracticalSuggestions" data-valmsg-replace="true"></span>
<label for="ProvidePracticalSuggestions">Provide practical suggestions for implementing change, e.g. step-by-step best practices</label>
</div>
Run Code Online (Sandbox Code Playgroud)
Shy*_*yju 22
编辑 于2016年7月9日
这不行
@Html.CheckBoxFor(model => model.ProvidePracticalSuggestions,
new { name = "help_practicalSuggestions" })
Run Code Online (Sandbox Code Playgroud)
但这会奏效
@Html.CheckBoxFor(model => model.ProvidePracticalSuggestions,
new { Name = "help_practicalSuggestions" })
Run Code Online (Sandbox Code Playgroud)
诀窍是使用大写字母"N"在"Name"
我不认为这是可能的.name使用HTML Helper方法时,无法更改checkbox元素的属性.出于好奇,我查看了MVC源代码并在InputHelper方法中发现了一些有趣的方法,该CheckBoxHelper方法是从CheckBoxFor方法中调用的

它为" type"," name"和" value" 调用MergeAttribute方法.此代码仅适用于Checkbox元素
编辑:查看MergeAttribute方法,它是这样的
public void MergeAttribute(string key, string value)
{
bool flag = false;
this.MergeAttribute(key, value, flag);
}
Run Code Online (Sandbox Code Playgroud)
因此,它是调用MergeAttribute了的TagBuilder类,它看起来像这样
public void MergeAttribute(string key, string value, bool replaceExisting)
{
if (!string.IsNullOrEmpty(key))
{
if (replaceExisting || !this.Attributes.ContainsKey(key))
{
this.Attributes[key] = value;
}
return;
}
else
{
throw new ArgumentException(CommonResources.Argument_Cannot_Be_Null_Or_Empty, "key");
}
}
Run Code Online (Sandbox Code Playgroud)
并且第一个If条件返回true,而内部if将不返回true,因为(我猜)name在Attributes集合中存在.所以它只会执行return声明.
解决方案:Html.CheckBoxFor您可以使用该Html.CheckBox方法,而不是使用辅助方法.
public static MvcHtmlString CheckBox(
this HtmlHelper htmlHelper,
string name
)
Run Code Online (Sandbox Code Playgroud)
所以你的代码将成为
@Html.CheckBox("help_practicalSuggestions",Model.ProvidePracticalSuggestions)
Run Code Online (Sandbox Code Playgroud)
第一个参数是输入元素所需的名称.
此外,如另一个答案中所述,如果您使用new { @Name="MyCustomName"},它将生成带有您传递的名称的复选框元素.但它不会生成具有此名称的隐藏输入字段.您的隐藏字段仍将与您的模型属性名称具有相同的名称.CheckboxFor辅助方法通常生成隐藏字段,以在此隐藏字段中存储选中/未选中复选框的值.因此,重要的是您应该将两个字段(复选框和它的关联隐藏字段)名称相同.
所以最好的解决方案是使用Html.CheckBox辅助方法.这也将为隐藏字段生成正确的名称.
Ser*_*sev 16
不能这样做.整点CheckBoxFor是自动生成name.如果您想要自己的名字,请使用
@Html.CheckBox("help_practicalSuggestions", Model.ProvidePracticalSuggestions)
Run Code Online (Sandbox Code Playgroud)
tkl*_*ves 16
实际上,你所要做的就是使用"@Name"(带有大写的N),如下所示,一切都应该正常工作!:)
@Html.CheckBoxFor(
model => model.ProvidePracticalSuggestions,
new { @Name = "help_practicalSuggestions"})
Run Code Online (Sandbox Code Playgroud)
干杯!
| 归档时间: |
|
| 查看次数: |
27165 次 |
| 最近记录: |