我有一个包含许多大视图的项目(可编辑的表单;考虑各种调查)。在试用阶段,客户想要一个可以查看所有表单和元素但不应该编辑/保存的角色。
一个简单的修复可能是检查角色并切换提交按钮的开/关。但是我希望有一些非常简单的方法可以将视图从editable转换为readonly,而无需在每个元素上输入HTML的@readonly(有超过一千个元素,从TextBoxFor,EditorFor到Checkbox和textareas)。
该项目使用三个角色:管理员,中心和患者。在有问题的控制器中,我有[授权(角色=“管理员,中心”)],但这可能需要现在(或者我需要添加患者),因为后者需要完整的readOnly访问。
有关如何使其工作的任何想法,而不编辑每个模型属性和/或每个剃刀编辑器?
Project使用mvc3,razor,jquery和jQuery-ui
答案 0 :(得分:0)
为了结束这个老问题,我将介绍我解决它的方式。
我不得不重载" TextBoxFor"," CheckBoxFor" (等),将readOnly / disabled的布尔参数添加到方法的末尾。例如:
//Overload TextBoxFor with a "disabled" parameter. For use with readonly-roles
public static IHtmlString TextBoxForRo<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes, bool disabled)
{
var attributes = new RouteValueDictionary();
if (htmlAttributes != null)
{
foreach (System.ComponentModel.PropertyDescriptor property in System.ComponentModel.TypeDescriptor.GetProperties(htmlAttributes))
{
attributes.Add(property.Name.Replace('_', '-'), property.GetValue(htmlAttributes));
}
}
if (disabled)
{
attributes["disabled"] = "disabled";
}
return htmlHelper.TextBoxFor(expression, attributes);
}
我必须为每种类型或表单输入执行此操作,显然我必须在视图中替换大量调用。它虽然有效,但它是我能想到的最好的解决方案。