我需要根据各种业务规则将控件标记为只读、禁用它们或完全隐藏它们。
目前,我正在为 View 模型中的每个属性传递一个枚举。然后我检查每个控件的枚举值。这导致了 Razor 的一大块令人讨厌的事情。即使使用 @helper
s,输出也相当糟糕。
我想知道是否有更好的方法来根据业务规则更改控件的外观。大多数时候,我只是添加属性。在最坏的情况下,我根本不显示控件。
最佳答案
显示逻辑/责任落在 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/