@ Html.Label不允许字符串连接

时间:2010-12-27 21:30:45

标签: asp.net-mvc-3 razor

我正在基于局部视图构建动态表单。我的视图继承了一个具有单个属性的模型:CatalogName { get; set; }

我试过这个:

@Html.Label(Model.CatalogName + "-ProductNumber", "Product Number")
@Html.TextBox(Model.CatalogName + "-ProductNumber")

HTML渲染如下:

<label for>Product Number</label>
<input name="CatatalogName-ProductNumber" type="text" />

如果我写这样的代码:

@Html.Label("ProductNumber-" + Model.CatalogName", "Product Number")

它将呈现我期望的方式

<label for="ProductNumber-CatalogName">Product Number</label>

这是MVC的错误吗?有什么答案可以解释为什么我的连接不会按照我想要的方式在标签中工作,但是对TextBox工作正常吗?

我的模型看起来像这样:

public class Product
{
  public string CatalogName { get; set; }
}

我的部分视图继承了模型:

@model Models.Product

我的控制器呈现如下操作结果:

return PartialView("_webForm", Models.Product { CatalogName = "CatalogName"} );

3 个答案:

答案 0 :(得分:1)

我在搜索类似问题时遇到了这个问题。我找到了微软(令人惊讶的)提供的源代码,至少发现了我的问题。

因为参数的注释不清楚,所以我使用的方法不正确。我只是想找一种简单的方法来显示一些文字。第一个参数应该是创建Label的相应控件的ID。 SECOND参数将实际显示在标签的显示部分。

通过拨打@Html.Label(parameter1),您将获得<label for="parameter1">parameter1</label>

因为ID以“。”开头。在javascript和jQuery调用中,底层代码仅在最后一个“。”之后取parameter1的最后一部分。

我刚刚开始做的是创建我自己的@ Html.Span扩展方法,以便让我完成我想要的东西。我理解这并不能完全回答MrGrigg的问题,但我希望找到这个问题的其他人能发现它有用。

以下是所有@ Html.Label方法调用的代码:

internal static MvcHtmlString LabelHelper(HtmlHelper html, ModelMetadata metadata, string htmlFieldName, string labelText = 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);
        return tag.ToMvcHtmlString(TagRenderMode.Normal);
    }

答案 1 :(得分:0)

@ Html.Label(Model.CatalogName.ToString()+“ - ProductNumber”,“Product Number”)

答案 2 :(得分:0)

您应该在模型类中定义进行连接的方法或属性。

如果这不是一个选项,请尝试:

@Html.Label((Model.CatalogName + "-ProductNumber").ToString(), "Product Number")