我试图像这样使用Html.LabelFor但它没有正确渲染,而不是显示像“AT& T”这样的ProviderName值,它只显示ProviderName
文本,而不是{{1}的值}。
ProviderName
然而,当我像这样使用Html.DisplayFor时:
<div id="ServiceProvider" class="main_filter" name="filterDiv">
<h4>Service Providers</h4>
@for (var i = 0; i < allProviders.Count(); i++)
{
<div class="filter_chkbox_div">
@Html.CheckBoxFor(m => allProviders[i].Selected, new { value = allProviders[i].ProviderCode, id = allProviders[i].ProviderCode, style="display:none" })
@Html.LabelFor(m => allProviders[i].ProviderName)
</div>
}
它显示ProviderName的值。我的代码有什么问题?我想使用Html.LabelFor。请帮忙
答案 0 :(得分:0)
LabelFor()
的目的是显示属性的名称(或者属性是否包含[Display]
属性,然后是Name
属性的值),并将其关联使用表单控件(单击它将焦点设置为控件)。
但是有overloads允许您指定要显示的文本,所以在您的情况下它将是
@Html.LabelFor(m => allProviders[i].ProviderName, allProviders[i].ProviderName)
将生成
<label for="allProviders_0__ProviderName">AT&T</label>
但是,这不会作为标签(设置焦点),因为您已覆盖关联控件的id
属性。不清楚为什么你会这样做(如果ProviderCode
不是唯一的那么你生成无效的html),但你应该从new { id = allProviders[i].ProviderCode }
方法中删除CheckBoxFor()
以便默认{生成{1}}属性(id
)。
附注:使用id="allProviders_0__ProviderName"
意味着模型绑定将失败(在使用new { value = allProviders[i].ProviderCode }
方法时,不应设置value属性)。您的商家HtmlHelper
的类型为Selected
,但bool
不是。您正在生成一个无法绑定到ProviderCode
的值属性,结果将是如果选中该复选框,它将提交(例如)&#34; ABC&#34;,绑定将失败,值将设置为bool
,如果未选中,则该值也将设置为false
。