2013-02-13 3 views
2

많은 대규모보기가있는 프로젝트 (편집 가능한 양식, 일종의 설문 조사)가 있습니다. 파일럿 단계에서 고객은 모든 양식과 요소를 볼 수 있지만 편집/저장할 수없는 역할을 원합니다.역할에 따라 사이트를 편집 가능하거나 읽기 전용으로 만드는 방법.

하나의 쉬운 해결 방법은 역할을 확인하고 제출 버튼을 설정/해제하는 것입니다. 그러나 모든 요소에 대해 HTML의 @readonly를 입력하지 않고 편집 가능한보기에서 읽기 전용으로 변환 할 수있는 쉬운 방법이 필요합니다. TextBoxFor, EditorFor, Checkbox 및 textareas에 이르기까지 수 천 가지 요소가 있습니다.

프로젝트는 관리자, 센터 및 환자라는 세 가지 역할을 사용합니다. 문제의 컨트롤러에서 필자는 [Authorize (Roles = "Admin, Center")]를 가지고 있지만, 아마도 후자가 완전한 readOnly 액세스를 필요로하기 때문에 이것은 이제 갈 필요가 있습니다.

모든 모델 속성 및/또는 모든 면도기를 편집하지 않고이 작업을 수행하는 방법에 대한 아이디어가 있습니까?

프로젝트는 그냥 나는 그것을 해결하는 방법을 제시하겠습니다이 오래된 질문을 닫습니다 mvc3, 면도기, JQuery와 및 jQuery를-UI

답변

0

를 사용합니다.

"TextBoxFor", "CheckBoxFor"등을 오버로드하여 메소드의 끝에 readOnly/disabled에 대한 부울 매개 변수를 추가해야했습니다. 아래 Exmaple는 :

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

내가보기에 전화를 많이 교체했다 분명 모든 유형 또는 양식 입력이 작업을 수행했고,. 그것은 작동하지만 그것은 내가 생각할 수있는 최선의 해결책이었다.