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。

我无法获得应该等于22的model.Prs_Role_ID_Deleted的值。

@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。 这是解决方案。

为其他开发者发布解决方案。

在SLaks建议@ Html.DisplayForWithID_ZeroIsBlank(model => model.Prs_Role_ID_Deleted,“span”)后

public static MvcHtmlString DisplayForWithID_ZeroIsBlank(this HtmlHelper helper,Expression> expression,string wrapperTag =“span”){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); 字符串OutputValue =“愚蠢的开发人员,这只适用于int。”; Type type = ctlValue.GetType(); if(type.Equals(typeof(int))){string s = ctlValue.ToString()。Trim(); 如果(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))); }


您需要将表达式编译为委托,然后在模型上调用它:

expression.Compile()(helper.ViewData.Model);
链接地址: http://www.djcxy.com/p/19091.html

上一篇: c# mvc helper extension Html.DisplayFor

下一篇: DropDownListFor failed in partial view due to expression