更新ASP.NET MVC Html Helper中的标签文本

时间:2015-02-04 18:34:50

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

我有一个ASP.NET MVC应用程序。我在Html Helpers的帮助下渲染视图。例如,我的.cshtml文件如下所示:

<div>
  @Html.Label(model => model.Price)
  @Html.TextPrice(model => model.Price)
</div>

在Extensions.cs中,帮助程序的定义如下:

public static MvcHtmlString Label<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string classes = "control-label")
{
  var attr = new Dictionary<string, object>();
  attr .Add("class", classes);

  return System.Web.Mvc.Html.LabelExtensions.LabelFor(html, expression, attr);
}

public static MvcHtmlString TextPrice<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, byte decimalPlaces = 2, string classes = "form-control")
{
  return Text(html, expression, classes + " decimal-" + decimalPlaces.ToString());
}

最终,我想将标签翻译成其他语言。现在,我需要做一个中介翻译。我的问题是,当我打印标签时,如何获取文本,更改文本,然后使用标签的新文本?我不想在我的模型上添加一堆Display属性。我只需要在我的Label扩展方法中进行快速搜索和替换。但是,我只是不确定如何获取文本并更新它。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以自己从表达式中获取属性名称,然后将翻译作为labelText参数的参数传递给LabelExtensions.LabelFor()

public static MvcHtmlString Label<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string classes = "control-label")
{
    var attr = new Dictionary<string, object>();
    attr .Add("class", classes);

    string propertyName = ((MemberExpression)expression.Body).Member.Name;
    string labelText = translate(propertyName);

    return System.Web.Mvc.Html.LabelExtensions.LabelFor(html, expression, labelText, attr);
}

答案 1 :(得分:0)

您可以在模型中使用DisplayName属性。 E.g:

 [Display(Name="Character_FirstName", ResourceType=typeof(ClassLib1.Resources))]
 public string FirstName {get; set;}

例如,请参阅:http://haacked.com/archive/2011/07/14/model-metadata-and-validation-localization-using-conventions.aspx/https://stackoverflow.com/a/3877154/2298807(与Localization of DisplayNameAttribute相关)