Asp.net 从HTML帮助程序中的参数获取属性

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

假设我有一个小模型对象,它包含一个必需的字符串,最大长度为50:

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请你用这个(代码片段)发布另一个问题-我敢说,你传递给这个函数的表达式不正确