Asp.net 从HTML帮助程序中的参数获取属性
假设我有一个小模型对象,它包含一个必需的字符串,最大长度为50:Asp.net 从HTML帮助程序中的参数获取属性,asp.net,asp.net-mvc-3,Asp.net,Asp.net Mvc 3,假设我有一个小模型对象,它包含一个必需的字符串,最大长度为50: public class ObjectModel { [Required] [MaxLength(50)] public string Name { get; set; } } 我需要创建一个自定义HTML帮助程序,在这里我可以传递一个字符串(在本例中为ObjectModel.Name),如果需要,可以创建一个类为“required”的HTML输入元素 现在,我正努力与以下方面合作: public st
public class ObjectModel
{
[Required]
[MaxLength(50)]
public string Name { get; set; }
}
我需要创建一个自定义HTML帮助程序,在这里我可以传递一个字符串(在本例中为ObjectModel.Name),如果需要,可以创建一个类为“required”的HTML输入元素
现在,我正努力与以下方面合作:
public static HtmlString Input(string label)
{
return new HtmlString("<input type=\"text\" />");
}
公共静态HtmlString输入(字符串标签)
{
返回新的HtmlString(“”);
}
因此,在我的Razor视图中,如果我执行类似于@InputHelper.Input(Model.Name)
的操作,我将无法访问属性。我的问题是,如何构造HTML帮助器类以接受模型属性及其属性
所以我已经取得了进一步的进展,但我仍然没有足够的经验来浏览表达式以获得我想要的。现在,我有:
@InputHelper.Input(m=>Model.Title.TitleName,“titlename2”,“Title Name”)
第二和第三个参数与这个问题无关。在helper方法中,我有:
公共静态HtmlString输入(表达式、字符串id、字符串标签)
但是当我去调试代码时,有太多的对象和属性需要筛选,以至于我不知道我的Required和MaxLength属性在哪里,如果它们在那里的话 你必须看看他们对.NET framework做了什么。创建一个采用表达式>,然后使用代码从帮助器中提取属性名称的方法:
和MaxLength
属性:
public static class ExpressionExtensions
{
public static TAttribute GetAttribute<TIn, TOut, TAttribute>(this Expression<Func<TIn, TOut>> expression) where TAttribute : Attribute
{
var memberExpression = expression.Body as MemberExpression;
var attributes = memberExpression.Member.GetCustomAttributes(typeof(TAttribute), true);
return attributes.Length > 0 ? attributes[0] as TAttribute : null;
}
}
公共静态类ExpressionExtensions
{
公共静态TatAttribute GetAttribute(此表达式),其中TatAttribute:Attribute
{
var memberExpression=expression.Body作为memberExpression;
var attributes=memberExpression.Member.GetCustomAttributes(typeof(tatAttribute),true);
返回属性.Length>0?属性[0]作为TatAttribute:null;
}
}
然后从代码中可以执行以下操作:
public static HtmlString Input(Expression<Func<string, Object>> expression, string id, string label)
{
var requiredAttribute = expression.GetAttribute<string, object, RequiredAttribute>();
if (requiredAttribute != null)
{
// some code here
}
}
公共静态HtmlString输入(表达式、字符串id、字符串标签)
{
var requiredAttribute=expression.GetAttribute();
if(requiredAttribute!=null)
{
//这里有一些代码
}
}
不适合我。将expression.Body
强制转换为MemberExpression
返回null
@Jakov请你用这个(代码片段)发布另一个问题-我敢说,你传递给这个函数的表达式不正确