2010-01-28 1 views
3

Мой пользовательский объект обладает свойством: IsAdministratorВ моей главной странице, нужно вывести HTML, только если пользователь является администратором

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

Каков наилучший способ для этого?

Я думал создать пользовательский элемент управления, а затем вызвать RenderPartial.

Но мне нужно получить доступ к объекту «Запрос», чтобы узнать, проверен ли пользователь, и если они есть, чтобы захватить пользовательский объект из кеша, а затем проверить свойство IsAdminstrator.

Помощь?

+0

Это звучит правильно, и я делаю это, как вы сказали. Просмотрите элемент управления пользователя и RenderPartial() и проверьте подлинность с объекта Request, и если пользователь является администратором в представлении User Control. – mare

ответ

0
  1. Вы создаете базовую модель с именем IsAdministrator.
  2. Вы перегружаете функцию OnAction Выполняется в базовом контроллере, из которого наследуется другой контроллер. Перегрузка, которая будет устанавливать IsAdministrator в функции запроса.
  3. Для каждого ActionResult вы передаете customviewmodel наследуя basecustomviewmodel из 1)
  4. Вы создать PartialView, которая будет передана в мастера, что взять basecustomviewmodel как модель
  5. пользуются
+0

Я действительно сделал шаги № 1-3. Как создать частичное представление, которое будет передано в мастер? – Blankman

+0

Перейти к просмотру/общей папке. Щелкните правой кнопкой мыши и выберите «Добавить», затем «Открыть» заполните параметры (в том числе «Создайте частичный вид (.ascx)». Затем используйте '<% Html.RenderPartial()%>' и наведите на него свой вид. –

+0

@dan, но как насчет модели, которую я должен передать на вызов RenderPartial? Как мне получить модельную форму на моей главной странице? – Blankman

-1

Попробуйте добавить контроль на переднем конце и помещая контент, который вы хотите отобразить внутри него.

например:

<asp:Placeholder ID="myPlaceholder" runat="server" Visible=""> 
    .... HTML for Admins 
</asp:Placeholder> 

Затем на странице загрузки в коде позади сделать что-то вроде этого -

if(user.IsAdministrator) 
     myPlacholder.Visible = true; 
    else 
     myPlaceholder.Visible = false; 
+0

Подождите ... Codebehinds? Это ASP.NET MVC. Почему на Земле вы хотели бы использовать codebehinds ?! Кроме того, скорее, чем огромная задница, если утверждение, почему бы не сделать 'myPlaceholder.Visible = user.IsAdministrator;' –

+0

К сожалению, извините, что не было MVC – TGuimond

+1

lol на огромном комментарии if и dan :-) – davethecoder

0

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

Я загрузил фьючерсы MVC и имплантированный RenderAction, это позволяет мне иметь действие, которое проверяет вход в систему и отображает вид входа в систему или пользовательский вид пользователя.

просто слишком

0

Контроллер:

public class HomeController : BaseController 
{ 
    public ActionResult Index() 
    { 
    return View(); 
    } 
} 

BaseController:

public class BaseController : Controller 
{ 
    public override void OnActionExecuted(ActionExecutedContext context) 
    { 
    base.OnActionExecuted(context); 

    bool isAdministrator = context.HttpContext.Request.IsAuthenticated && context.HttpContext.User.IsInRole("Administrator"); 
    context.Controller.ViewData.Add("IsAdministrator", isAdministrator); 
    } 
} 

Мастер-страница:

<% 
    bool isAdministrator = bool.Parse(ViewData["IsAdministrator"].ToString()); 
    if(isAdministrator) { 
    Html.RenderPartial("Users/UserControl"); 
} %> 

~/Просмотров/Общие/Пользователи/UserControl.ascx

доступа текущий администратор здесь с <%= Page.User %>.

Смежные вопросы