HTML.LabelFor 未正确呈现

HTML.LabelFor doesn't render properly

我正在尝试像这样使用 Html.LabelFor,但它没有正确呈现,即没有像 "AT&T" 那样显示 ProviderName 值,它只显示 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。请帮助

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

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

@Html.LabelFor(m => allProviders[i].ProviderName, allProviders[i].ProviderName)

这将生成

<label for="allProviders_0__ProviderName">AT&T</label>

但是这不会作为标签(设置焦点),因为您已经覆盖了关联控件的 id 属性。不清楚您为什么要这样做(如果 ProviderCode 不是唯一的,那么您会生成无效的 html),但您应该从 CheckBoxFor() 方法中删除 new { id = allProviders[i].ProviderCode } 以便生成默认 id 属性 (id="allProviders_0__ProviderName")。

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