Элемент управления ASP.NET в одной области содержимого должен ссылаться на элемент управления в другой области содержимого - PullRequest
0 голосов
/ 04 июня 2010

У меня есть главная страница, которая делит основное содержимое на две области. В секции body главной страницы есть два элемента управления asp: ContentPlaceHolder с идентификаторами cphMain и cphSideBar соответственно.

Одна из соответствующих страниц содержимого имеет элемент управления в cphMain, который должен ссылаться на элемент управления в cphSideBar. В частности, SqlDataSource в cphMain ссылается на TextBox в cphSideBar для использования в качестве параметра в команде выбора. При загрузке страницы содержимого возникает следующая ошибка времени выполнения:

Could not find control 'TextBox1' in ControlParameter 'date_con'. 
Description: An unhandled exception occurred during the execution of the 
current web request. Please review the stack trace for more information about 
the error and where it originated in the code. 
Exception Details: System.InvalidOperationException: Could not find control
'TextBox1' in ControlParameter 'date_con'.
Source Error: An unhandled exception was generated during the execution of the
current web request. Information regarding the origin and location of the
exception can be identified using the exception stack trace below.  
Stack Trace: 
[InvalidOperationException: Could not find control 'TextBox1' in ControlParameter 'date_con'.]
    System.Web.UI.WebControls.ControlParameter.Evaluate(HttpContext context, Control control) +1753150
    System.Web.UI.WebControls.Parameter.UpdateValue(HttpContext context, Control control) +47
    System.Web.UI.WebControls.ParameterCollection.UpdateValues(HttpContext context, Control control) +114
    System.Web.UI.WebControls.SqlDataSource.LoadCompleteEventHandler(Object sender, EventArgs e) +43
    System.EventHandler.Invoke(Object sender, EventArgs e) +0
    System.Web.UI.Page.OnLoadComplete(EventArgs e) +8698566
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +735

Я вроде знаю, в чем проблема ... ASP.NET не нравится тот факт, что SqlDataSource и TextBox находятся в разных элементах asp: Content на странице контента.

В качестве обходного пути у меня есть еще один TextBox в cphMain с SqlDataSource, который имеет Visible = False. Затем в обработчике события Page_Load () содержимое TextBox в cphSideBar копируется в содержимое невидимого TextBox в cphMain.

Я получаю результаты, которые хочу получить, от работы, которую я придумал, но это похоже на такой взлом. Мне было интересно, есть ли лучшее решение, которое мне не хватает.

Пожалуйста, сообщите.

1 Ответ

0 голосов
/ 04 июня 2010

Я считаю, что вам нужно ссылаться на элементы управления, используя их контейнеры.

Например, получить ссылку на ContentPlaceHolder:

ContentPlaceHolder myContent = (ContentPlaceHolder)this.Master.FindControl("MyContent");

, где MyContent - это ContentPlaceHolderID, а не ID из ContentPlaceHolder:

<asp:Content ContentPlaceHolderID="MyContent" ID="wrongID" runat="server">

Затем вы можете использовать FindControl , чтобы найти дочерний элемент управления в контейнере MyContent:

myContent.FindControl("someControlID").Visible = false;
...