我有一个基本的viewmodel类,其中包括一个当前用户属性,我需要MVC根据用户的管理员状态呈现文本框或标签。
目前,我这样做的方式是,但是代码必须重复很多次。
@if (Model.CurrentUser.Admin)
{
@Html.EditorFor(m => m.Order.CustomerDiscount);
}
else
{
@Html.DisplayFor(m => m.Order.CustomerDiscount);
}
是否可以创建自定义编辑器扩展?
@Html.PrivilegedEditorFor(m=>m.Order.CustomerDiscount);
编辑:
感谢 @Fals。这里提供一个略微不同的解决方案:
using System.Web.Mvc.Html;
public static class HtmlHelperExtensions
{
public static MvcHtmlString PrivilegedEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, bool isAdmin)
{
if (isAdmin)
{
return htmlHelper.EditorFor(expression);
} else {
return htmlHelper.DisplayFor(expression);
}
}
}
html.ViewData.Model.CurrentUser.Admin
部分无法确定,因为帮助程序方法只定义了模型作为一个简单对象。因此,我不得不传递一个名为 isAdmin 的布尔参数,这个帮助程序就不必查看模型来决定用户是否是管理员。 - Mehmet AVŞARhtmlHelper.EditorFor
部分对我无效,相反我不得不使用System.Web.Mvc.Html.EditorExtensions.EditorFor(htmlHelper, expression)
和System.Web.Mvc.Html.DisplayExtensions.DisplayFor(htmlHelper, expression)
。 - Mehmet AVŞAR