В случае, когда действие концептуально одинаково, но дисплей отличается, я бы выполнил одно действие и вернул бы разные представления в зависимости от вашего дискриминатора. Я бы пошел с вашим вторым примером, слегка измененным. Обратите внимание, что нет необходимости получать данные, если пользователь не в соответствующей роли.
[Authorize]
public ActionResult List(int? divID, int? subDivID)
{
var view = HttpContext.User.IsInRole("Admin")
? "AdminList"
: (HttpContext.User.IsInRole("Consultant")
? "ConsultantList"
: null);
if (view == null)
{
return View("NotFound");
}
var data = GetListItems(divID.Value, subDivID.Value);
return View( view, data );
}
Вы, конечно, понимаете, что у вас есть потенциал для необработанного исключения, когда вы ссылаетесь на Значение потенциально нулевого Nullable<int>
, верно?
Кроме того, если вы делаете это часто, вы можете преобразовать конструкцию префикса представления в общий метод.
public string GetRolePrefix()
{
return HttpContext.User.IsInRole("Admin")
? "Admin"
: (HttpContext.User.IsInRole("Consultant")
? "Consultant"
: null);
}
Тогда назовите это как
...
var prefix = GetRolePrefix();
if (prefix == null)
{
return View("NotFound"); // more likely "NotAuthorized" ???
}
...get model...
return View( prefix + "List", data );