小時後。稍後再關閉。稍後拉動頭髮。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))); }
爲什麼不創建一個視圖模型,做所有的轉換呢? – Fran
弗蘭,我認爲MVC的工作方式是「模型」只包含純數據的模型。輸出的格式是在cshtml,JS或助手擴展中。對我而言,組合輸出格式就好像把漢堡包放在與冰淇淋相同的盤子上。是的,它可以做到,但它會變得真正sl。。 – JenniferWalters
視圖模型與格式化輸出無關,視圖模型包含頁面的數據項。純數據究竟是什麼? – Fran