2013-05-03 1 views
0

Есть ли способ привязки <%# Page.ClientID %> без привязки к странице дочерних элементов управления?asp.net веб-формы связывать только <%# %>

Например:

<%# SomePageProprtyThatReturnsString %> 
<someTag:SomeControl ID="SomeControlID" runat="server" OnDataBinding="SomeControlID_DataBinding"></someTag:SomeControl> 

Если я следующее, чем SomeControlID будет связан с каждой нежелательной пост-спиной

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 
    DataBind(); 
} 

Если я не буду связывать страницы на каждом посте тогда SomePageProprtyThatReturnsString не будет отображаться на обратной стороне

+0

Не могли бы вы подробнее рассказать об этом? Я не совсем понимаю, в чем проблема ... Вы хотите, чтобы SomePageProprtyThatReturnsString оценивался один раз, но постоянно отображался? Или SomePageProprtyThatReturnsString должен находиться в контексте вашего контроля? –

+0

Извините, может быть, я не так правильно описал свой вопрос. Вместо <% # SomePageProprtyThatReturnsString%> this <% # "мы можем использовать некоторую строку"%>. Поэтому я хочу видеть «некоторую строку» на моей странице всегда, но SomeControlID shold будет связан только при первой загрузке страницы (без обратной записи) – Vladimirs

+0

Насколько я понял <%# %> оценивается только при вызове Page.DataBind(), но если я позвоню это приведет к вызову DataBind() всех дочерних страниц страницы. Поэтому я хочу, чтобы <%# %> оценивался каждый раз, когда загружалась страница, но контроль над дочерними элементами должен быть связан только в том случае, если IsPostBack – Vladimirs

ответ

1
<%# SomePagePropertyThatReturnsString %> 

Похоже, это может быть какой-то публичной собственности вы создали на Page сам? Если это так, вы можете вывести это свойство напрямую без необходимости привязки данных, изменив код:

<%= this.Page.SomePropertyThatReturnsString %> 
+0

Извините за задержку. Это отлично работает для меня. Не могли бы вы объяснить, что такое <% # и <% = (я не знаю, как это называется, поэтому я не могу сообщить никому о Google) – Vladimirs

+0

Я нашел. Только для справки http://forums.asp.net/p/1139381/1828702.aspx – Vladimirs

2

Вы можете выбрать, какие элементы управления вы хотите привязать. Так что, если у вас есть что-то вроде этого:

<asp:Label runat="server" ID="lblSomet Text='<%# SomePageProprtyThatReturnsString %>'/> 
<someTag:SomeControl ID="SomeControlID" runat="server" OnDataBinding="SomeControlID_DataBinding"></someTag:SomeControl> 

Вы можете позвонить Databind только на Label:

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 
    lblSomething.DataBind(); 
} 
+0

Спасибо, что ответили, но это не совсем то, что я хотел знать. В вашем сценарии я мог просто поставить Literal и установить его значение Text в OnLoad. Или здесь нет способа оценить код в пределах <%# %> на странице без вызова DataBind() страницы? – Vladimirs

+0

@ Владимир Нет, нет. Но вы можете привязать данные к родительскому элементу управления. Если вы привязываете asp: Panel, например, все дочерние элементы управления/выражения привязаны – nmat

+0

Мне не известно о том, что вы можете 'DataBind()' другие элементы управления, чем 'ListView' или 'Repeater's - спасибо! – Oliver