2011-01-05 81 views
3

我有一個自定義幫助器「我的」,我想獲取其中使用的屬性的值。在html幫助器中獲取屬性值

我打電話這樣說:

<%@ 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") %> 

和助手:

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

在現階段,我這樣做:

//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]; 

但顯然它不」 t工作爲"[0].My"

+0

有你傳遞的屬性名稱等作爲字符串,而不僅僅是直接傳遞值什麼特別的原因?也許我錯過了,但使用反射似乎沒有必要。 – 2011-01-05 17:44:04

+0

@David當我有一個ViewModel時(幾乎總是),我會很活躍我想要自動獲取屬性的值,而不需要在助手參數中設置 – Omu 2011-01-05 17:47:44

+0

Downvotes很奇怪。 @Omu只需要訪問已經在MVC中的「查看數據符號」功能。這不僅是可能的,而且是MVC如何工作的基礎。你降低了這種方法,並降低了MVC。 – jfar 2011-01-05 18:37:45

回答