Существует ли простой способ обновления нескольких элементов управления ContentPlaceHolder независимо друг от друга? - PullRequest
0 голосов
/ 20 октября 2010

Это очень простой пример главной страницы ASP.NET.Главная страница отображает 4 гиперссылки и имеет два элемента управления ContentPlaceholder.Первые две ссылки - на страницы контента, которые будут отображаться в ContentPlaceHolder1, вторые две ссылки - на страницы контента, которые будут отображаться в ContentPlaceHolder2.

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="ProofOfConcept.Site1"  %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <h1>
        Demo site
    </h1>
    <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/HeadContent1.aspx">Head Content 1 in ContentPlaceHolder1</asp:HyperLink>
    <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/HeadContent2.aspx">Head Content 2 in ContentPlaceHolder1</asp:HyperLink>
    <asp:HyperLink ID="HyperLink3" runat="server" NavigateUrl="~/MainContent1.aspx">Main Content 1 in ContentPlaceHolder2</asp:HyperLink>
    <asp:HyperLink ID="HyperLink4" runat="server" NavigateUrl="~/MainContent2.aspx">Main Content 2 in ContentPlaceHolder2</asp:HyperLink>
    <br />
    <div style="border: 1px dotted blue;">
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
            This is default text for ContentPlaceholder1
        </asp:ContentPlaceHolder>
    </div>
    <br />
    <div style="border: 1px dotted red;">
        <asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server">
            This is default text for ContentPlaceholder2
        </asp:ContentPlaceHolder>
    </div>
    </div>
    </form>
</body>
</html>

Все четыре страницы контента выглядят так:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.master" AutoEventWireup="true" CodeBehind="MainContent1.aspx.cs" Inherits="ProofOfConcept.MainContent1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceholder2" runat="server">
    This is text from MainContent1 in ContentPlaceholder2
</asp:Content>

... с соответствующими настройками идентификатора ContentPlaceholder.Другими словами, каждая страница содержимого содержит только один элемент управления Content, связанный с элементом ContentPlaceHolders на главной странице.

Если я создаю сайт и загружаю, например, HeadContent1.aspx (первая ссылка), отображается только содержимое HeadContent1 (плюс разметка с главной страницы, очевидно).Если щелкнуть третью ссылку, отобразится содержимое во втором ContentPlaceHolder, но первый заполнитель вернется к своей разметке по умолчанию.

Все это выглядит так, как задумано и, несомненно, очень полезно во многих сценариях, ноЯ бы хотел сделать так, чтобы два ContentPlace держателя обновлялись независимо друг от друга.Работать как старомодные фреймы HTML, более или менее?Возможно ли это, или я должен использовать какой-то другой элемент управления (или другую настройку вместо Master / Content)?

Ответы [ 2 ]

0 голосов
/ 20 октября 2010

Я согласен с Майком. Вы идете длинный путь вокруг. Для того, чтобы ваш пример работал с мастер-страницами, вам понадобится 16 разных страниц контента. На каждой странице должно быть заполнено содержимое PlaceHolder1 и PlaceHolder2, в зависимости от того, какие ссылки были нажаты и в каком порядке.

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

0 голосов
/ 20 октября 2010

Я бы сказал, что вы хотите использовать iframes для вашей ситуации. Главные страницы не работают так, как вы ищете.

...