2016-11-01 120 views
0

小時後。稍後再關閉。稍後拉動頭髮。c#mvc助手擴展Html.DisplayFor

Prs_Role_ID_Deleted是一個int。

在我的Details.cshtml中,如果model.Prs_Role_ID_Deleted的值爲0(zeri),我試圖讓它輸出一個「」(空字符串)。

問題是我無法得到model => model.Prs_Role_ID_Deleted的值。 我可以得到屬性名稱。 我可以得到model.Prs_Role_ID_Deleted。

我無法得到model.Prs_Role_ID_Deleted的22

@Html.ZZZ(model => model.Prs_Role_ID_Deleted) 


public static MvcHtmlString ZZZ<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression) 
{ 
    var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression)); 
    return "whatever"; 
} 

我開始認爲這是不可能的確定值應等於價值。


謝謝SLaks。這是解決方案。

爲其他開發者發佈解決方案。

AFTER SLaks建議 @ Html.DisplayForWithID_ZeroIsBlank(型號=> model.Prs_Role_ID_Deleted, 「跨度」)

公共靜態MvcHtmlString DisplayForWithID_ZeroIsBlank(此的HtmlHelper幫手,表達式>表達,串wrapperTag = 「跨度」 ) { var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression)); TModel model =(TModel)helper.ViewContext.ViewData.ModelMetadata.Model; var ctlValue = expression.Compile()(helper.ViewData.Model); string OutputValue =「愚蠢的開發人員,這隻適用於int。」; 類型type = ctlValue.GetType();如果(type.Equals(typeof(int))) {s = ctlValue.ToString()。Trim(); if(ctlValue == null || ctlValue.ToString()。Trim()==「0」) { OutputValue =「」; } else { OutputValue = ctlValue.ToString(); } } return MvcHtmlString.Create(string.Format(「< {0} id = \」{1} \「> {2}」,wrapperTag,id,OutputValue,helper.DisplayFor(expression))); }

+0

爲什麼不創建一個視圖模型,做所有的轉換呢? – Fran

+0

弗蘭,我認爲MVC的工作方式是「模型」只包含純數據的模型。輸出的格式是在cshtml,JS或助手擴展中。對我而言,組合輸出格式就好像把漢堡包放在與冰淇淋相同的盤子上。是的,它可以做到,但它會變得真正sl。。 – JenniferWalters

+0

視圖模型與格式化輸出無關,視圖模型包含頁面的數據項。純數據究竟是什麼? – Fran

回答

3

您需要編譯的表達式的委託,然後調用它的模型:

expression.Compile()(helper.ViewData.Model);