2013-02-13 52 views
2

我有一个项目有很多大的意见(可编辑的形式;认为各种调查)。在试用阶段,客户需要一个能够查看所有表单和元素的角色,但不应该能够编辑/保存。如何根据角色使网站可编辑或只读。

一个简单的解决方法可能是检查角色并打开/关闭提交按钮。但我希望有一些非常简单的方法可以将视图从可编辑转换为只读,而无需在每个元素上输入HTML的@readonly(有很多元素,从TextBoxFor,EditorFor到Checkbox和textareas都有)。

该项目利用三个角色:管理员,中心和病人。在有问题的控制器中,我有[授权(角色=“管理员,中心”)],但现在可能需要现在(或需要添加患者),因为后者需要完整的只读访问。

有关如何在不编辑每个模型属性和/或每个剃须刀编辑器的情况下实现这一目标的任何想法?

项目采用MVC3,剃须刀,jQuery和jQuery的UI

回答

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); 
    } 

我不得不这样做每种类型或表单输入,显然我不得不取代视图中的很多电话。它虽然工作,这是我能想到的最好的解决方案。

相关问题