Ошибка при загрузке частичного просмотра на основе вкладки, выбранной на странице ASP.NET MVC - PullRequest
0 голосов
/ 07 декабря 2010

Я новичок в MVC и пытаюсь загрузить частичное представление на основе выбранной вкладки.Вот две вкладки (Типы документов и Документы) и Два частичных представления (NavMenuProduct.ascx и NavMenuDocType.ascx).Страница по умолчанию: Index.aspx

Мой код не загружает частичное представление.Буду признателен, если у кого-нибудь есть пример кода для этого.

Вот Javascript:

<script type="text/javascript">
    $(function () {
        var $tabs = $("#tabs").tabs({
            select: function (e, ui) {
                hdnTabSelected.value = ui.index;
                alert(hdnTabSelected.value); 
            }
        });
    });
</script>

HTML-код:

<table class="tableNoBorder"  width="100%">
    <!--Header Dashboard-->
    <tr>
        <td colspan="2">
            <div id="container">
                <h1>DocShare</h1>
                <div id="welcome">Welcome, <%=new CacheUser().GetLoginUser().CommanName%></div>
            </div>
        </td>
    </tr>
    <!--Tabs Section for Products and DocType-->
    <tr>
        <td colspan=2>
            <DIV id=tabs>
            <UL>
            <LI><A  href="#" >Products</A></LI>
            <LI><A href="#">Doc Type</A></LI>
            </DIV>
        </td>
    </tr>
    <!--Left Menu Navigation and Main Content-->
    <tr>
        <td valign="top" width="200px">
            <div >
            <input type="hidden" id = "hdnTabSelected" runat="Server"  />
            <%-- If TabSelected = 0, load Product Menu, otherwise Load DocType Menu--%>
            <%if (hdnTabSelected.Value == "0") %>
                <% Html.RenderAction("NavMenuProduct","Home"); %>
            <% else %>
                <% Html.RenderAction("NavMenuDocType","Home"); %>
            </div>
        </td>
        <td valign="top" width ="100%" >
            <div id="content">
                <asp:ContentPlaceHolder ID="MainContent" runat="server"></asp:ContentPlaceHolder> 
            </div>
        </td>
    </tr>
</table>

Ответы [ 3 ]

1 голос
/ 07 декабря 2010

То, что вы делаете, - это стандартная главная страница ... Я бы открыл файл new MVC и посмотрел бы, как он это делает с домашней страницей и вкладками ...

Master:

    <div id="header">
        <div id="title">
            <h1>My MVC Application</h1>
        </div>

        <div id="logindisplay">
            <% Html.RenderPartial("LogOnUserControl"); %>
        </div> 

        <div id="menucontainer">

            <ul id="menu">              
                <li><%: Html.ActionLink("Home", "Index", "Home")%></li>
                <li><%: Html.ActionLink("About", "About", "Home")%></li>
            </ul>

        </div>
    </div>

    <div id="main">
        <asp:ContentPlaceHolder ID="MainContent" runat="server" />

        <div id="footer">
        </div>
    </div>
</div>

о

<asp:Content ID="aboutTitle" ContentPlaceHolderID="TitleContent" runat="server">
    About Us
</asp:Content>

<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
    <h2>About</h2>
    <p>
        Put content here.
    </p>
</asp:Content>
1 голос
/ 07 декабря 2010

Удалите runat="server" из вышеуказанного скрытого ввода. Проблема в том, что отрендеренный html и javascript не совпадают.

Это должно работать при первой загрузке страницы, однако визуализированный идентификатор для скрытого ввода будет выглядеть как ctl00$MainContent$hdnTabSelected, что не соответствует hdnTabSelected.value в javascript.

Вы можете изменить javascript на это, но Я рекомендую против этого

<script type="text/javascript">
    $(function () {
        var $tabs = $("#tabs").tabs({
            select: function (e, ui) {
                <%=hdnTabSelected.ClientID %>.value = ui.index;
                alert(<%=hdnTabSelected.ClientID %>.value); 
            }
        });
    });
</script>
0 голосов
/ 07 декабря 2010

Не очевидно, что не так, согласно вашему вопросу, но на первый взгляд я думаю, что вы должны заменить свои звонки на Html.RenderAction на звонки на Html.Action .

Разница между ними заключается в том, что Html.RenderAction будет отображать результат непосредственно в ответ (который более эффективно, если действие возвращает большое количество HTML) тогда как Html.Action возвращает строку с результатом.

У Хакеда есть пост в блоге с более подробной информацией.

...