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"
有你傳遞的屬性名稱等作爲字符串,而不僅僅是直接傳遞值什麼特別的原因?也許我錯過了,但使用反射似乎沒有必要。 – 2011-01-05 17:44:04
@David當我有一個ViewModel時(幾乎總是),我會很活躍我想要自動獲取屬性的值,而不需要在助手參數中設置 – Omu 2011-01-05 17:47:44
Downvotes很奇怪。 @Omu只需要訪問已經在MVC中的「查看數據符號」功能。這不僅是可能的,而且是MVC如何工作的基礎。你降低了這種方法,並降低了MVC。 – jfar 2011-01-05 18:37:45