0

我正在尝试像这样使用 Html.LabelFor 但它不能正确呈现,即不是显示像“AT&T”这样的 ProviderName 值,它只是显示ProviderName文本而不是ProviderName.

<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>
    }

而当我像这样使用 Html.DisplayFor 时:

<label>@Html.DisplayFor(m => allProviders[i].ProviderName)</label>

它显示 ProviderName 的值。我的代码有什么问题?我想使用 Html.LabelFor。请帮忙

4

1 回答 1

0

的目的LabelFor()是显示属性的名称(或者如果属性包含[Display]属性,则显示其Name属性的值),并将其与表单控件相关联(单击它将设置焦点到控件)。

但是,有一些重载允许您指定要显示的文本,因此在您的情况下,它将是

@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()方法中删除,以便生成默认id属性 ( id="allProviders_0__ProviderName")。

旁注:您使用的new { value = allProviders[i].ProviderCode }意味着模型绑定将失败(在使用HtmlHelper方法时,您永远不应该设置 value 属性)。您的属性Selected是 typeofboolProviderCode不是。您正在生成一个无法绑定到 a 的 value 属性,bool结果将是,如果选中该复选框,它将提交(例如)“ABC”,绑定将失败并且该值将设置为false,如果未选中,则值也将设置为false

于 2016-04-21T12:18:36.740 回答