ASP.NET MVC或者渲染EditorFor基于用户角色

我有一个包含当前用户属性的基本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(this HtmlHelper htmlHelper, Expression<Func> expression, bool isAdmin) { if (isAdmin) { return htmlHelper.EditorFor(expression); } else { return htmlHelper.DisplayFor(expression); } } } 

您可以为此创建自定义HTML Helper程序,例如:

1)将新Class添加到项目中,这将包含帮助程序。 只需确保使用的模型包含CurrentUser.Admin

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Helpers; using System.Web.Mvc.Html; using System.Linq.Expressions; namespace MyAppName.Helpers { public static class HtmlPrivilegedHelper { public static MvcHtmlString PrivilegedEditorFor(this HtmlHelper html, Expression> expression) { // You can access the Model passed to the strongly typed view this way if (html.ViewData.Model.CurrentUser.Admin) { return html.EditorFor(expression); } return html.DisplayFor(expression); } } } 

2)将名称空间添加到Views文件夹中的Web.config ,然后每次要使用它时都不必包含名称空间:

           //Here the helper reference    

希望这对你有所帮助!

尝试使用扩展方法。 可以使用您需要的方法创建静态类(不能是非静态的或嵌套的),其中一个参数是Html,并使用“this”关键字进行标记。 您可以在此处找到更多信息: http : //msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx

您可以创建HTML帮助程序方法。 一种方法是使用静态方法创建一个新类,该方法返回一个用于呈现的html字符串。 或者您可以扩展现有的html帮助程序类。

这里有一个很棒的asp.net演练: http : //www.asp.net/mvc/tutorials/older-versions/views/creating-custom-html-helpers-cs