繁体   English   中英

C#Mvc Helper扩展Html.DisplayFor

[英]c# mvc helper extension 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。 那就是解决方案。

为其他开发人员发布解决方案。

臭虫建议@ Html.DisplayForWithID_ZeroIsBlank(model => model.Prs_Role_ID_Deleted,“ span”)

公共静态MvcHtmlString DisplayForWithID_ZeroIsBlank(此HtmlHelper帮助器,Expression>表达式,字符串wrapperTag =“ span”){var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression)); TModel模型=(TModel)helper.ViewContext.ViewData.ModelMetadata.Model; var ctlValue = expression.Compile()(helper.ViewData.Model); string OutputValue =“愚蠢的开发人员。仅适用于int。”; 类型type = ctlValue.GetType(); if(type.Equals(typeof(int))){字符串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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM