Использование нескольких ContentPlaceHolder-ов в мастер странице

dm-23

Здравствуйте !Есть мастер страница, у которой в области формы размещено несколько элементов ContentPlaceHolder, пример:
<%@ Master Language="VB" Inherits="Avtoreg4.MainHeaderPage" Codebehind="MainHeaderPage.master.vb" %>

<<span>!DOCTYPE</span> html PUBLIC <span>"-//W3C//DTD XHTML 1.0 Transitional//EN"</span> <span>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span>>

<html <span>xmlns</span><span>=</span><span>"http://www.w3.org/1999/xhtml"</span>>
<head <span>runat</span><span>=</span><span>"server"</span>>
 <<span>title</span>><<span>/</span><span>title</span>>
 <<span>link</span> <span>href</span><span>=</span><span>"CSS/Style.css"</span> <span>rel</span><span>=</span><span>"stylesheet"</span> <span>type</span><span>=</span><span>"text/css"</span> <span>/</span>>
 <<span>link</span> <span>href</span><span>=</span><span>"CSS/smoothness/jquery-ui.css"</span> <span>rel</span><span>=</span><span>"stylesheet"</span> <span>type</span><span>=</span><span>"text/css"</span> <span>/</span>>
 <script src="Script/jquery-1.6.2.min.js" type="text/javascript"></script>
 <script src="Script/jquery-ui-1.8.14.custom.min.js" type="text/javascript"></script>
 <script src="Script/jquery.validate.min.js" type="text/javascript"></script>
 <script src="Script/jquery.ui.datepicker-ru.js" type="text/javascript"></script>
 <asp:ContentPlaceHolder <span>id</span><span>=</span><span>"head"</span> <span>runat</span><span>=</span><span>"server"</span>>
 <<span>/</span>asp:ContentPlaceHolder>
<<span>/</span>head>
<body>
 <script type="text/javascript">
 $(document).ready(function () {
 $(".dtpicker").datepicker();
 $("#accordFilter").accordion({
 collapsible: true
 });
 });
 </script>
 <form <span>id</span><span>=</span><span>"form1"</span> <span>runat</span><span>=</span><span>"server"</span>>
 <asp:ScriptManager <span>ID</span><span>=</span><span>"ScriptManager1"</span> <span>runat</span><span>=</span><span>"server"</span>>
 <<span>/</span>asp:ScriptManager>
 
 <div <span>id</span><span>=</span><span>"NameReport"</span>>
 <asp:ContentPlaceHolder <span>ID</span><span>=</span><span>"NameReportContent"</span> <span>runat</span><span>=</span><span>"server"</span>>
 <<span>/</span>asp:ContentPlaceHolder>
 <<span>/</span>div>
 <div <span>id</span><span>=</span><span>"accordFilter"</span> <span>style</span><span>=</span><span>"margin-top:15px; width:50%;"</span>>
 <h3><a <span>href</span><span>=</span><span>"#"</span> <span>style</span><span>=</span><span>"color:#284E98"</span>>Условия выборки:<<span>/</span>a><<span>/</span>h3>
 <div <span>id</span><span>=</span><span>"divFilterContent"</span>>
 <asp:ContentPlaceHolder <span>id</span><span>=</span><span>"FilterContent"</span> <span>runat</span><span>=</span><span>"server"</span>>
 
 <<span>/</span>asp:ContentPlaceHolder>
 <<span>/</span>div>
 <<span>/</span>div>
 
 <div <span>id</span><span>=</span><span>"divMiddlePanel"</span>>
 <asp:ContentPlaceHolder <span>ID</span><span>=</span><span>"CPanelContent"</span> <span>runat</span><span>=</span><span>"server"</span>>
 <<span>/</span>asp:ContentPlaceHolder>
 <<span>/</span>div>
 
 <div <span>id</span><span>=</span><span>"divGridContent"</span>>
 <asp:ContentPlaceHolder <span>ID</span><span>=</span><span>"GridContent"</span> <span>runat</span><span>=</span><span>"server"</span>>
 
 <<span>/</span>asp:ContentPlaceHolder>
 <<span>/</span>div>
 <<span>/</span>form>
<<span>/</span>body>
<<span>/</span>html>
Созданная на ее основе страница:
<%@ Page Title="" Language="vb" ***************="false" MasterPageFile="~/MainHeaderPage.master" CodeBehind="Test_Delete.aspx.vb" Inherits="Avtoreg4.Test_Delete" %>


<asp:Content <span>ID</span><span>=</span><span>"Content1"</span> <span>ContentPlaceHolderID</span><span>=</span><span>"head"</span> <span>runat</span><span>=</span><span>"server"</span>>
<<span>/</span>asp:Content>
<asp:Content <span>ID</span><span>=</span><span>"Content2"</span> <span>ContentPlaceHolderID</span><span>=</span><span>"NameReportContent"</span> <span>runat</span><span>=</span><span>"server"</span>>
<<span>/</span>asp:Content>
<asp:Content <span>ID</span><span>=</span><span>"Content3"</span> <span>ContentPlaceHolderID</span><span>=</span><span>"FilterContent"</span> <span>runat</span><span>=</span><span>"server"</span>>

<<span>/</span>asp:Content>
<asp:Content <span>ID</span><span>=</span><span>"Content4"</span> <span>ContentPlaceHolderID</span><span>=</span><span>"CPanelContent"</span> <span>runat</span><span>=</span><span>"server"</span>>
 <asp:SqlDataSource <span>ID</span><span>=</span><span>"SqlDataSource1"</span> <span>runat</span><span>=</span><span>"server"</span>><<span>/</span>asp:SqlDataSource>
<<span>/</span>asp:Content>
<asp:Content <span>ID</span><span>=</span><span>"Content5"</span> <span>ContentPlaceHolderID</span><span>=</span><span>"GridContent"</span> <span>runat</span><span>=</span><span>"server"</span>>
 <asp:GridView <span>ID</span><span>=</span><span>"GridView1"</span> <span>runat</span><span>=</span><span>"server"</span> <span>DataSourceID</span><span>=</span><span>"SqlDataSource1"</span>>
 <<span>/</span>asp:GridView>
<<span>/</span>asp:Content>
Вроде все просто, однако таблица GridView1 не видит источника SQLDataSource1, который находится в другой секции. Пробовал ставить ClientIDMode="static", эффекта не дает. Понимаю что можно перенести все в одну секцию, или организовать присваивание в CodeBehind, НО хочется именно так, или может кто сможет объяснить почему это невозможно, если это так.
5 ответов

dm-23

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.basedataboundcontrol.datasourceid.aspx
и при чем тут связывание ? связать источник не проблема, проблема в том что серверные контролы одного asp:Content не видят контролы другого. И не обязательно источник данных, Можно скажем в источник - SQLDataSource1 добавить параметры на Select, ControlParameter, которые будут ссылаться на другие серверные элементы и, если они все находятся в одном asp:Content, все прекрасно, если в разных не работат, выпадает в ошибку с пометкой что контрол с указанным ID не найден....


dm-23

связать источник не проблема, проблема в том что серверные контролы одного asp:Content не видят контролы другого
перечитай еще раз


dm-23

перечитай еще раз
это намек на:
<My:UserControl <span>DataSourceID</span><span>=</span><%# MyObjectDataSource.UniqueID %> RunAt="Server" />
? Так то оно работает, аналогично можно было сделать в коде на page_load : MyUserControlID.DataSourceID=MyObjectDataSource.UniqueID;. Я так понимаю что ClientIDMode="static" влияет только на вывод ID на клиенте и не используется на стороне сервера, к тому-же если у компонента нет отображения на стороне клиента, как у SQLDataSource, такого атрибута-ClientIDMode у него не будет, а в процессе исполнения на стороне сервера ID формируются свои, для внутренних связей..., ладно, спасибо и на этом.


dm-23

Так то оно работает
вот и прекрастно