c# mvc 辅助扩展 Html.DisplayFor
c# mvc helper extension Html.DisplayFor
小时后。以后上网。稍后再拔头发。
Prs_Role_ID_Deleted 是一个整数。
在我的 Details.cshtml 中,如果 model.Prs_Role_ID_Deleted 的值 = 0 (zeri),我试图让它输出一个“”(空字符串)。
问题是我无法获取模型 => 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")
<dd><span id="Prs_Role_ID_Deleted"></span></dd>
public static MvcHtmlString DisplayForWithID_ZeroIsBlank<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> 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);
string OutputValue = "Silly developer. This only works for int.";
Type type = ctlValue.GetType();
if (type.Equals(typeof(int)))
{
string 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}</{0}>", wrapperTag, id, OutputValue, helper.DisplayFor(expression)));
}
您需要将表达式编译为委托,然后在模型上调用它:
expression.Compile()(helper.ViewData.Model);
小时后。以后上网。稍后再拔头发。
Prs_Role_ID_Deleted 是一个整数。
在我的 Details.cshtml 中,如果 model.Prs_Role_ID_Deleted 的值 = 0 (zeri),我试图让它输出一个“”(空字符串)。
问题是我无法获取模型 => 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")
<dd><span id="Prs_Role_ID_Deleted"></span></dd>
public static MvcHtmlString DisplayForWithID_ZeroIsBlank<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> 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);
string OutputValue = "Silly developer. This only works for int.";
Type type = ctlValue.GetType();
if (type.Equals(typeof(int)))
{
string 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}</{0}>", wrapperTag, id, OutputValue, helper.DisplayFor(expression)));
}
您需要将表达式编译为委托,然后在模型上调用它:
expression.Compile()(helper.ViewData.Model);