Веб-форма содержимого ASP.NET - содержимое из заполнителя исчезает - PullRequest
0 голосов
/ 09 апреля 2010

Я пытаюсь установить класс для тега body на моем сайте asp.net, который использует главную страницу и веб-формы контента. Я просто хочу иметь возможность сделать это, добавив свойство bodycssclass (см. Ниже) к директиве страницы веб-формы содержимого.

Это работает через приведенное ниже решение, но когда я пытаюсь просмотреть Default.aspx, элемент управления Content1 теряет свое содержимое. Есть идеи почему?


Вот как я это делаю. У меня есть главная страница со следующим содержанием:

<%@ Master Language="C#" ... %>
<html><head>...</head>
<body id=ctlBody runat=server>
 <asp:ContentPlaceHolder ID="cphMain" runat="server" />
</body>
</html>

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

public partial class Site : MasterPageBase
{
    public override string BodyCssClass
    {
        get { return ctlBody.Attributes["class"]; }
        set { ctlBody.Attributes["class"] = value; }
    }
}

наследуется от:

public abstract class MasterPageBase : MasterPage
{
    public abstract string BodyCssClass
    {
        get;
        set;
    }
}

мой default.aspx определяется как:

<%@ Page Title="..." [master page definition etc..] bodycssclass="home" %>
<asp:Content ID="Content1" ContentPlaceHolderID="cphMain" runat="server">
  Some content
</asp:Content>

код этого файла выглядит следующим образом:

public partial class Default : PageBase { ... }

и он наследуется от:

public class PageBase : Page
{
    public string BodyCssClass
    {
        get
        {
            MasterPageBase mpbCurrent = this.Master as MasterPageBase;
            return mpbCurrent.BodyCssClass;
        }
        set
        {
            MasterPageBase mpbCurrent = this.Master as MasterPageBase;
            mpbCurrent.BodyCssClass = value;
        }
    }
}

Ответы [ 2 ]

1 голос
/ 17 мая 2010

Это работает для меня сейчас ...

public class PageBase : Page
{
    public string BodyCssClass
    {
        get;
        set;
    }

    protected override void OnPreInit(EventArgs e)
    {
        MasterPageBase mpbCurrent = this.Master as MasterPageBase;
        mpbCurrent.BodyCssClass = BodyCssClass;

        base.OnLoadComplete(e);
    }
}
0 голосов
/ 09 апреля 2010

Вы пытались добавить директиву MasterType на свою страницу контента? Вот так:

Я все равно рекомендую это сделать. Посмотрим, поможет ли это вам ...

См. http://msdn.microsoft.com/en-us/library/ms228274.aspx и http://msdn.microsoft.com/en-us/library/c8y19k6h.aspx

...