在asp.net mvc 4 razor中访问Custom Html Helpers中的属性
我在ASP.NET MVC 4 razor视图引擎C#中创建了HtmlHelper。
我可以将视图模型属性传递给我的帮助程序类吗?
例如,我有财产
[Required] [Display(Name = "Your Lastname")] public string Lastname { get; set; }
我可以将此属性传递给我的帮助程序,如@Html.Example(model => model.Lastname)
,然后在帮助程序中获取数据注释(如果需要此字段,则显示名称等等)?
[Display]
属性丰富了元数据。 因此,您可以从元数据中获取信息。
例如,如果要检索帮助程序中的显示名称:
public static class HtmlHelpers { public static IHtmlString Example( this HtmlHelper html, Expression> ex ) { var metadata = ModelMetadata.FromLambdaExpression(ex, html.ViewData); var displayName = metadata.DisplayName; return new HtmlString(html.Encode(displayName)); } }
如果我们假设你有一个视图模型:
public class MyViewModel { [Required] [Display(Name = "Your Lastname")] public string Lastname { get; set; } }
您可以在强类型视图中使用帮助器:
@model MyViewModel @Html.Example(x => x.Lastname)
现在让我们假设你编写了一个自定义元数据属性:
public class FooBarAttribute : Attribute, IMetadataAware { public FooBarAttribute(string bar) { Bar = bar; } public string Bar { get; private set; } public void OnMetadataCreated(ModelMetadata metadata) { metadata.AdditionalValues["foo"] = Bar; } }
您以前使用以下方式装饰模型:
public class MyViewModel { [Required] [FooBar("This is the bar")] public string SomeBar { get; set; } }
然后在你的助手里面你可以获取自定义属性:
public static class HtmlHelpers { public static IHtmlString Example( this HtmlHelper html, Expression> ex ) { var metadata = ModelMetadata.FromLambdaExpression(ex, html.ViewData); if (metadata.AdditionalValues.ContainsKey("foo")) { var foo = metadata.AdditionalValues["foo"] as string; return new HtmlString(html.Encode(foo)); } return MvcHtmlString.Empty; } }
更新:
您似乎需要获取Required消息。 不知道为什么你需要在自定义帮助器中执行此操作,但这里有一个示例,您可以如何实现:
上述就是C#学习教程:在asp.net mvc 4 razor中访问Custom Html Helpers中的属性分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public static class HtmlHelpers { public static IHtmlString Example( this HtmlHelper html, Expression> ex ) { var me = (ex.Body as MemberExpression); if (me != null) { var required = me .Member .GetCustomAttributes(typeof(RequiredAttribute), false) .Cast() .FirstOrDefault(); if (required != null) { var msg = required.FormatErrorMessage(me.Member.Name); return new HtmlString(html.Encode(msg)); } } return MvcHtmlString.Empty; } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1002832.html