asp.net-mvc - ASP.NET MVC 根据业务规则禁用/隐藏控件

标签 asp.net-mvc user-permissions disabled-control

我需要根据各种业务规则将控件标记为只读、禁用它们或完全隐藏它们。

目前,我正在为 View 模型中的每个属性传递一个枚举。然后我检查每个控件的枚举值。这导致了 Razor 的一大块令人讨厌的事情。即使使用 @helpers,输出也相当糟糕。

我想知道是否有更好的方法来根据业务规则更改控件的外观。大多数时候,我只是添加属性。在最坏的情况下,我根本不显示控件。

最佳答案

显示逻辑/责任落在 View 的肩上,所以......

如果规则依赖于例如用户权限并且适用于所有控件,那么我想说每个 View 模型一个枚举就足够了。

否则你就做得很好。我唯一要改变的是我会编写自定义扩展方法来显示 View 模型属性。

大致如下:

    public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, DisplayMode mode)
    {
     // put a switch statement here to either
     // add html attribute for readonly
     // or
     // return null/emptystring
    }

通过此扩展,您的 View 可以具有 @Html.TextBoxFor(x => x.Prop, Model.PropMode)

这会稍微清理你的 Razor View 。

还要记住,只读字段值仍然可以更改(开发工具、firebug)。这是您的 HttpPost 操作中需要注意的事情。

关于asp.net-mvc - ASP.NET MVC 根据业务规则禁用/隐藏控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15411768/

相关文章:

c# - WPF UI 权限,在数据库中定义

ubuntu - 如何在没有 sudo 的情况下启动 gunicorn 服务

iOS/Xcode : Name button created in storyboard name so it can be disabled

javascript - 启用/禁用 jquery ui 组件

html - 通过禁用的子元素进入时永远不会触发 Mouseenter

c# - ASP.net MVC - 指定显示模板的完整路径

asp.net-mvc - Bootstrap 模式页面 Asp.net MVC 验证

asp.net-mvc - 带有路由名称的 Html.RenderAction

asp.net-mvc - 对于特定的 Controller 使温莎实例化不同的类

ios - 自动化测试ABAddressBook和ALAssetsLibrary请求访问