在html helper中获取property的值

Omu*_*Omu 3 asp.net-mvc

我有一个自定义助手"我的",我想获得其中使用过的属性的值.

我这样称呼它:

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<VMThatHasAllTheseProps>" %>
<%=Html.My("Hi") %>
<%=Html.EditorFor(o => o.Prop) %> \\uses Html.My in the My.ascx template

<%=Html.My("[0].My") %>
<%=Html.My("[1].My") %>
Run Code Online (Sandbox Code Playgroud)

和助手:

public static MvcHtmlString My(this HtmlHelper html, string prop, object value = null)
{
//get value of the used property here
}
Run Code Online (Sandbox Code Playgroud)

目前我喜欢这样:

 //get val from model
            if (value == null && html.ViewData.Model != null)
            {
                var p = TypeDescriptor.GetProperties(html.ViewData.Model).Find(prop, false);

                if (p != null) value = p.GetValue(html.ViewData.Model);
            }

            //get val from model metada
            if(value == null && html.ViewData.ModelMetadata != null)
            {
                var p = TypeDescriptor.GetProperties(html.ViewData.ModelMetadata.Model).Find(prop, false);
                if (p != null) value = p.GetValue(html.ViewData.ModelMetadata.Model);
            }

            //get val from viewdata
            if (value == null && html.ViewData.ContainsKey(prop))
                value = html.ViewData[prop];
Run Code Online (Sandbox Code Playgroud)

但显然它不起作用 "[0].My"

小智 6

ViewData.Eval(字符串表达式)?

ViewDataDictionary.Eval方法(System.Web.Mvc)