加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 从HTML帮助器中的参数获取属性

发布时间:2020-12-16 09:46:14 所属栏目:asp.Net 来源:网络整理
导读:所以假设我有一个小模型对象,其中包含一个必需的字符串,最大长度为50: public class ObjectModel{ [Required] [MaxLength(50)] public string Name { get; set; }} 我需要创建一个自定义HTML帮助器,我可以传入一个字符串(在本例中为ObjectModel.Name),如果
所以假设我有一个小模型对象,其中包含一个必需的字符串,最大长度为50:

public class ObjectModel
{
    [Required]
    [MaxLength(50)]
    public string Name { get; set; }
}

我需要创建一个自定义HTML帮助器,我可以传入一个字符串(在本例中为ObjectModel.Name),如果需要,创建一个类“必需”的HTML输入元素.

现在,我正在努力:

public static HtmlString Input(string label)
 {
     return new HtmlString("<input type="text" />");
 }

所以在我的Razor视图中,如果我执行类似@ InputHelper.Input(Model.Name)的操作,则无法访问属性.我的问题是,如何构建我的HTML帮助程序类以接受Model属性及其属性?

所以我取得了进一步的进展,但我仍然没有足够的经验来浏览表达式以获得我想要的东西.现在,我有:

@ InputHelper.Input(m => Model.Title.TitleName,“titlename2”,“Title Name”)

第二个和第三个参数与此问题无关.在辅助方法中,我有:

public static HtmlString Input(Expression< Func< string,Object>> expression,string id,string label)

但是当我去调试代码时,有很多对象和属性需要筛选,我不知道我的Required和MaxLength属性在哪里,如果他们甚至在那里.

解决方法

您可以使用以下扩展方法获取Required和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;
    }
}

然后从你的代码中你可以做到:

public static HtmlString Input(Expression<Func<string,string label)
{
    var requiredAttribute = expression.GetAttribute<string,object,RequiredAttribute>();
    if (requiredAttribute != null) 
    {
        // some code here
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读