为什么@ Html.Label呈现不完整的字符串

时间:2013-12-05 10:34:57

标签: c# asp.net-mvc asp.net-mvc-4 html-helper

我是MVC4的新手并且不明白为什么@ Html.Label正在按照以下方式砍掉我的字符串数据。

返回的字符串是“11,12.2,15.2,17.1R,18.3R,21R”,@ Html.Label正在砍掉最后一个之前的所有内容。字符。

查看

<td>@foo.GetString</td>
<td>@Html.Label(foo.GetString)</td>

模型

public string GetString { get 
{ 
    return "11, 12.2, 15.2, 17.1R, 18.3R, 21R";
} 

}

产生的标记

<tr>
  <td>11, 12.2, 15.2, 17.1R, 18.3R, 21R</td>
  <td>
    <label for="">3R, 21R</label>
  </td>
</tr>

我正在使用@ foo.GetString,因为这会显示整个字符串,但我想了解为什么会这样。

3 个答案:

答案 0 :(得分:3)

这是LabelExtensions类的LabelHelper方法。 source

internal static MvcHtmlString LabelHelper(HtmlHelper html, ModelMetadata metadata,
               string htmlFieldName, string labelText = null, 
               IDictionary<string, object> htmlAttributes = null)
        {
            string resolvedLabelText = labelText ?? metadata.DisplayName 
                 ?? metadata.PropertyName 
                 ?? htmlFieldName.Split('.').Last();
            if (String.IsNullOrEmpty(resolvedLabelText))
            {
                return MvcHtmlString.Empty;
            }

            TagBuilder tag = new TagBuilder("label");
            tag.Attributes.Add("for", TagBuilder.CreateSanitizedId(
                html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
            tag.SetInnerText(resolvedLabelText);
            tag.MergeAttributes(htmlAttributes, replaceExisting: true);
            return tag.ToMvcHtmlString(TagRenderMode.Normal);
        }

如您所见,它会在字段名称htmlFieldName.Split('.').Last()中找到最后一个点,以便在您的案例中生成resolvedLabelText。所以你不应该用它来显示原始数据。其主要用途是显示metadata.DisplayNamemetadata.PropertyName

您可以尝试@Html.Raw按原样显示内容(不进行任何编码)。

答案 1 :(得分:0)

我的解决方案是:

<label id=@("label_" + Model.Name) for=@("textBox_" + Model.Name)>@(Model.Caption)</label>

答案 2 :(得分:0)

您可以使用@ Html.Label的第二个重载方法,如下所示:

@ Html.Label(“”,foo.GetString)

会给你预期的结果。