HTML.LabelFor无法正确呈现

时间:2016-04-21 11:36:39

标签: html asp.net-mvc-4 label html.labelfor

我试图像这样使用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。请帮忙

1 个答案:

答案 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