更新 ASP.NET MVC Html Helper 中的标签文本
Update Label Text in ASP.NET MVC Html Helper
我有一个 ASP.NET MVC 应用程序。我正在 Html 助手的帮助下渲染视图。例如,我的 .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());
}
最后,我想把标签翻译成其他语言。现在,我需要做一个中介翻译。我的问题是,当我打印标签时,如何抓取文本、更改它,然后将新文本用于标签?我现在不想在我的模型上添加一堆显示属性。我只需要在我的 Label 扩展方法中进行快速搜索和替换。但是,我只是不确定如何抓取文本并对其进行更新。
谢谢!
您可以自己从表达式中获取 属性 名称,然后将翻译作为 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);
}
您可以在模型中使用 DisplayName 属性。例如:
[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/ or (related to Localization of DisplayNameAttribute)
我有一个 ASP.NET MVC 应用程序。我正在 Html 助手的帮助下渲染视图。例如,我的 .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());
}
最后,我想把标签翻译成其他语言。现在,我需要做一个中介翻译。我的问题是,当我打印标签时,如何抓取文本、更改它,然后将新文本用于标签?我现在不想在我的模型上添加一堆显示属性。我只需要在我的 Label 扩展方法中进行快速搜索和替换。但是,我只是不确定如何抓取文本并对其进行更新。
谢谢!
您可以自己从表达式中获取 属性 名称,然后将翻译作为 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);
}
您可以在模型中使用 DisplayName 属性。例如:
[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/ or (related to Localization of DisplayNameAttribute)