Различное меню на master.page в зависимости от типа входа - PullRequest
1 голос
/ 04 июля 2011

У меня есть 2 типа пользователей (phonebookers и salesrep). Предполагается, что у них есть 2 разные строки меню, ожидающие входа в систему.

Из файла login.aspx - я установил число Session[] с среди них ["EmployeeType"]. На моей главной странице у меня есть ContentPlaceholder ID="Menu".

Master.page кажется заблокированным на месте задолго до того, как я смогу что-либо изменить в ожидании какого-либо значения сеанса. Я обнаружил последовательность загрузки, которая, кажется, подтверждает мое приостановление, так как мастер-страница загружается и блокируется до того, как какая-либо страница контента войдет в игру.

Я пытался <% If (Session["EmployeeType"].ToString() == "1") { %> type 1 employee <% } else {%>Type 2 employee<% } %> - без удачи.

Я пытался сделать это в Page_PreRender(EventArgs e) - не повезло.
Я попытался использовать элементы управления гиперссылкой на главной странице без текста, а затем задал текст позже. I PreRender и visible = true / false - не повезло.

Google говорит, что есть опция с javascript, но я не нашел ни одного примера или не распознал какой-либо javascript как то, что я мог бы использовать.

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

Ответы [ 3 ]

2 голосов
/ 04 июля 2011

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

Я бы хотел создать две панели и скрыть одну из них по умолчанию, ту, которая наименее распространена длябыть показано.А затем включите соответствующую панель из кода мастер-страницы, как показано ниже:

<div id="menu">
    <asp:Panel ID="UserMenu" runat="server">
        <MenuControl:UserMenu />
    </asp:Panel>
    <asp:Panel ID="AdminMenu" runat="server" Visible="false">
        <MenuControl:AdminMenu />
    </asp:Panel>
</div>

Метод Page_Load выглядит следующим образом:

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["EmployeeType"].ToString() == "1")
    {
        AdminMenu.Visible = true;
        UserMenu.Visible = false;
    }
    else
    {
        AdminMenu.Visible = false;
        UserMenu.Visible = true;
    }
}

Это покажет мой пользовательский элемент управления AdminMenu если это Сотрудник с EmployeeType, равным 1, в противном случае отображается UserMenu Пользовательский элемент управления.

1 голос
/ 04 июля 2011

Я рекомендую определить некоторые общедоступные статические методы в классе главной страницы для установки различных типов меню:

public partial class SiteMaster : System.Web.UI.MasterPage
{
    // ...

    public static void SetEmployeeMenu(MasterPage master)
    {
        // do whatever you want on master page
        ((SiteMaster)master).EmployeeMenu.Style.Add("display", "");
    }
}

А затем на вашем событии загрузки содержимого страницы решите, какое меню вы хотите отобразить, и используйте следующие функции:

SiteMaster.SetEmployeeMenu(this.Master);
1 голос
/ 04 июля 2011

Попробуйте:

  <% If (Session["EmployeeType"].ToString()  == "1") { %> type 1 employee <% } else {%>Type 2 employee<% } %>
...