Шаблон редактора MVC3 для нескольких типов - PullRequest
0 голосов
/ 19 августа 2011

У меня есть модель с некоторыми параметрами, которые пользователь должен видеть, но не редактировать, а другие они должны иметь возможность редактировать. То же самое относится и к автору. Итак, я использовал атрибуты [UIHint("Author")] и [UIHint("User")] и написал пару шаблонов редактора, например:

@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 Ответ

1 голос
/ 23 сентября 2011

Hi Oniel,

Вы можете создать отдельные ViewModel для каждого типа пользователя и использовать аннотацию данных [ReadOnly].Но затем вы попадаете в области большого количества повторений.

Лично я бы порекомендовал вам создать собственную версию каждого типа данных и реализовать стандартную обработку на основе ролей, используя дополнительные аннотации данных метаданных для настройки.Хорошо, начнем с работы, но затем можно многократно использовать и легко переносить.

Пример:

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

или:

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

Вы можете выполнить кодпоиск на основе / базе данных в классе где-то еще, к которому ваши шаблоны типов данных запрашивают, чтобы принять решение о том, должен ли пользователь / роль получать права на чтение / редактирование этого свойства.

Имеет ли это смысл?

В качестве третьего варианта создайте шаблон редактора для всего объекта и включите в него только те поля и типы полей, которые вам интересны.

MVC настолько гибок - я полагаю, в конце концов, это зависит от того, как DRY делаютВы хотите сделать свой код.

Удачи!Dan.

...