CustomAttribute反映了html属性MVC5
希望找到一种方法,当在MVC5中使用Custom属性或者更喜欢RegularExpressionAttribute修饰模型中的属性时,html控件将它包含为控件的另一个属性。 例如
class CoolModel { [CustomHtmlAttribute("hello")] public string CoolValue {get;set;} }
输出…
或类似的东西。 因此,对于RegularExpressionAttribute,pattern属性将非常棒。
class CoolModel { [RegularExpressionAttribute("/d")] public string CoolValue {get;set;} }
输出…
我需要此输出而不启用Javascript不显眼的选项。 所以我想在某种方式中指定模型中的一些属性,这些属性可以下推到视图中。 不确定数据注释提供程序是否可以执行此任务。 不确定是否可以扩展Helper以获得此结果。
感谢帮助。
如果使用带有重载的标准帮助程序来添加html属性是不可接受的,那么您可以创建一个属性实现IMetadataAware
,它将属性添加到metadata.AdditionalValues
,然后可以在自定义html帮助程序中使用。 一个简单的例子可能是
[AttributeUsage(AttributeTargets.Property)] public class CustomHtmlAttribute : Attribute, IMetadataAware { public static string ValueKey { get { return "Value"; } } public string Value { get; set; } public void OnMetadataCreated(ModelMetadata metadata) { if (Value != null) { metadata.AdditionalValues[ValueKey] = Value; } } }
并创建一个帮助器来渲染文本框(这里只显示一个重载)
public static MvcHtmlString CustomHtmlTextBoxFor(this HtmlHelper helper, Expression> expression) { ModelMetadata metaData = ModelMetadata.FromLambdaExpression(expression, helper.ViewData); object attributes = null; if (metaData.AdditionalValues.ContainsKey(ValueKey)) { attributes = new { customhtml = (string)metaData.AdditionalValues[ValueKey] }; } return InputExtensions.TextBoxFor(helper, expression, attributes); }
并用它作为
[CustomHtml(Value = "hello")] public string CoolValue { get; set; }
并在视图中
@Html.CustomHtmlTextBoxFor(m => m.CoolValue)
为了使其更灵活,您可以向属性添加更多属性,以便将其应用为
[CustomHtml(Value = "hello", Pattern="/d")] public string CoolValue { get; set; }
并修改帮助程序以呈现您定义的所有html属性。