2011-08-19 4 views
0

사용자가 볼 수는 있지만 편집 할 수없는 매개 변수와 편집 할 수 있어야하는 매개 변수가있는 모델이 있습니다. 저자에 대해서도 마찬가지입니다. 그래서, 난과 같이, 몇 편집기 템플릿을 [UIHint("Author")][UIHint("User")] 속성을 사용 썼다 :여러 유형의 MVC3 편집기 템플리트

@inherits System.Web.Mvc.WebViewPage 

@if (ViewBag.RoleId > (int)Role.RoleEnum.Author) 
{ 
    @Html.TextBoxFor(m => m, new { disabled = "disabled" }) 
} 
else 
{ 
    @Html.TextBoxFor(m => m) 
} 

이 거의 내가 원하는 무엇. 나는 이러한 속성을 부울에 적용하고 기본 EditorFor와 같은 확인란을 사용할 수 있기를 원합니다. 다른 템플릿을 만들고 [UIHint("AuthorBool")]과 같은 것을 사용할 수 있다고 생각합니다. 그러나 더 나은 것을 생각해 내고 싶습니다.

답변

1

안녕 Oniel,

당신은 각 사용자 유형에 대해 별도의 ViewModels를 작성하고 [읽기 전용]의 데이터 주석을 사용할 수 있습니다. 그러나 당신은 많은 양의 반복의 영역에 들어갑니다.

개별적으로 각 데이터 형식의 고유 한 버전을 만들고 추가 메타 데이터 데이터 주석을 사용하여 표준 역할 기반 처리를 구현하여 사용자 지정할 것을 권장합니다. 처음에는 약간의 작업을했지만 대량으로 재사용 할 수 있고 이식성이 뛰어납니다.

예 :

[UIHint("MyCustomTemplateControl")] 
[AdditionalMetadata("DenyEditUnlessInRole", "Admin")] 
public string MyName { get; set; } 

나 :

[UIHint("MyCustomTemplateControl")] 
[AdditionalMetadata("DenyEditIfInRole", "StandardUser")] 
public string MyName { get; set; } 
당신은 당신의 데이터 유형 템플릿 쿼리는 사용자 여부에 대한 결정을 내릴 것을 다른 곳에서 클래스에 기반/데이터베이스를 기반으로 조회 코드를 수행 할 수 있습니다

/role은이 속성에 대한 읽기/편집 액세스 권한을 가져야합니다.

의미가 있습니까?

세 번째 옵션으로 전체 개체에 대한 편집 템플릿을 만들고 노출시 흥미로운 필드와 필드 유형 만 포함합니다.

MVC는 유연성이 뛰어납니다. 결국 드 라이가 코드 작성 방법에 의존한다고 봅니다.

행운을 빈다! Dan.