2012-06-08 7 views
0

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

Dim mstr As MasterPage = Page.Master 
Dim element = mstr.FindControl("hiddenField1"), HiddenField) 

или иным образом поставить значение в cookie, URL и т. д. и считывать его с пользовательского элемента управления.

Однако я был в состоянии получить значение с помощью

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
    Dim mstr As MasterPage = Page.Master 
    Return CallByName(mstr.Page, "ProductCounter", [Get]) 
End Sub 

Поскольку мое решение работает

CallByBame в основном дает вам «позднее связывание», которое «выяснение метода в run- время "в отличие от" раннего связывания ", где компилятор определяет его для вас.

from this answer

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

EDIT: ответ Icarus работает для веб-приложения asp..net, но не для веб-сайтов asp.net. Я ищу ответ, который работает для более позднего.

ответ

0

Если я правильно понимаю, вам не нужно использовать отражение вообще. Вы должны быть в состоянии сделать что-то подобное в вашем управлении (C#, извините):

//Assume "MyPage" is the Page inside the MasterPage 
MyPage myPage = this.Page as MyPage; 
if(myPage!=null) 
{ 
    var publicProperty = myPage.PublicProperty; 
} 

UPDATE: Обеспечение упрощенного примера.

Site.Master:

<asp:ContentPlaceHolder ID="MainContent" runat="server">   
</asp:ContentPlaceHolder> 
<%--this is the user control on the MasterPage--%> 
<uc1:WebUserControl1 ID="WebUserControl11" runat="server" /> 

Скажем, у вас есть еще одна страница, которая называется «О», который использует этот Site.Master и это «О программе» имеет общественную собственность под названием «общественная собственность, как так:

public string PublicProperty { 
     get { 
      return ViewState["Key"] as string; 
     } 
     set { 
      ViewState["Key"] = value; 
     } 
} 

Теперь в вашем WebUserControl, вы можете сделать это безопасно, скажем, на Page_Load:.

protected void Page_Load(object sender, EventArgs e) 
{ 
     About p = this.Page as About; 
     if (p != null){ 
      var prop = p.PublicProperty; 
      //Do Something cool with it 
     } 
} 
+0

Привет Икар, спасибо за ваш ответ я тр но я не смог получить доступ к объекту About из пользовательского элемента управления. Как вы это делаете? Не нужно жалеть об использовании C#, я владею обоими языками :) – alykhalid

+0

Он работает для меня просто отлично, и он должен работать на вас. Вы не можете заставить это работать, если вы создали свой проект как «Веб-сайт», а не для создания обычного проекта типа приложения ASP.NET. – Icarus

+0

Привет, Икар. Вы правы, я должен был быть более ясным в своем вопросе. Я создаю сайт asp.net, а не веб-приложение. – alykhalid

Смежные вопросы

 Смежные вопросы