Как мне передать главную страницу Контент-контроль из пользовательского элемента управления? - PullRequest
4 голосов
/ 15 августа 2011

У меня есть пользовательский элемент управления, и я хочу «внедрить» что-то в заголовок главной страницы.Я пытался использовать следующий подход (главная страница и фрагменты mmarkup пользовательского элемента управления) ...

MasterPage:

<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>

Контроль пользователя:

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <link type="text/css" rel="stylesheet" href="/Shared/Css/Navigation.css" />
</asp:Content>

Но это дает ошибку:

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

Так как же поместить содержимое на главную страницу во время выполнения из элемента управления?

Ответы [ 2 ]

4 голосов
/ 15 августа 2011

Вы не можете.

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

См. Работа с ASPГлавные страницы .NET программно и Как работают главные страницы для подробностей.

3 голосов
/ 15 августа 2011

Вы можете получить доступ к содержанию мастер-страниц с помощью открытых методов мастер-страницы. Поэтому, если я возьму пример из вашего вопроса, вы можете установить href ссылки на главной странице вашего пользовательского элемента управления или страницы со следующей модификацией вашего кода:

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

<link id="link" type="text/css" rel="stylesheet" />

Добавьте свойство на главную страницу, в котором указана ссылка.

public string LinksHref
{
     get { return link.Href; }
     set { link.Href = value; }
}

Если вы хотите получить доступ к этому со страницы, вы можете добавить директиву MasterType.

<%@ MasterType VirtualPath="~/Site.Master" %>

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

Master.LinksHref = "/Shared/Css/Navigation.css";

Если вы хотите получить доступ к этому из пользовательского элемента управления, вы не можете использовать директиву MasterType и должны выполнять приведение самостоятельно:

((MasterPageClassName)Page.master).LinksHref= "/Shared/Css/Navigation.css";
...