Как получить значение метки из пользовательского веб-элемента управления на странице содержимого с помощью главной страницы

У меня есть веб-контроль пользователя book.ascx и formview:

<formview runat="server" id="fv">
<ItemTemplate>
<asp:Label runat="server" id="bookID" Text='<%# Eval ("bookId") %>' />
</ItemTemplate>
</FormView>

Это представление формы динамически привязывается к данным. Теперь у меня есть страница содержимого Default.aspx:

<%@ Register src="Book.ascx" tagname="Book" tagprefix="uc1" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<uc1:Book id="book1" runat="server"/>
<asp:Label runat="server" id="lblBookId" />
</asp:Content>

Я хочу получить значение метки из пользовательского веб-элемента управления на страницу default.aspx. Какой лучший способ решить эту проблему. Благодарю вас.

Ответы на вопрос(3)

protected void fv_OnDataBound(object sender, EventArgs e) 
{
    Label fvLabel = (Label)fv.FindControl("bookID");
    lblBookId.Text = fvLabel.Text;
}
 sacrament01 окт. 2010 г., 20:24
ContentPlaceHolder c = Page.Master.FindControl ("MainContentPlaceHolder") as ContentPlaceHolder; UserControl usc = c.FindControl ("book1") как UserControl; FormView fv = usc.FindControl ("fv") как FormView; Обозначить lbl = fv.FindControl ("bookID") как ярлык;
 jim01 окт. 2010 г., 20:39
@sacrament ответь на свой вопрос и затем прими его ... ты получишь аккуратный значок «самообучения». или ... просто пойди и прими мой ответ :)
 sacrament01 окт. 2010 г., 19:52
Спасибо, Джон, но вид формы, который он связан в элементе управления, я не привязываю в default.aspx.
 sacrament01 окт. 2010 г., 20:23
Хорошо, ребята, я понял, как это здесь:
 citronas01 окт. 2010 г., 20:38
очень уродливое решение, хотя
 sacrament01 окт. 2010 г., 20:25
Спасибо, хотя за советы
 sacrament01 окт. 2010 г., 20:08
Я попытался, но все еще та же проблема. Ссылка на объект не установлена ​​на экземпляр объекта.
 jon3laze01 окт. 2010 г., 20:02
Он должен работать так же, как при попытке ссылки на элементы управления MasterPage со страницы содержимого. Попробуйте использовать только эти две строки кода в Default.aspx.cs и посмотрите, подходит ли это вам. Label fvLabel = (Label) fv.FindControl ("bookID"); lblBookId.Text = fvLabel.Text;

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

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

public class StringEventArgs:EventArgs
{
  public String Value {get; private set;}  
  public StringEventArgs(String val){ this.Value = val; }
}
 citronas01 окт. 2010 г., 20:56
У меня сейчас немного времени, но, может быть, я отредактирую этот ответ этой ночью, чтобы получить голосование и голоса вашей партии;)
 jim01 окт. 2010 г., 21:00
Я собираюсь на пробежку с пивом и чипсами, я проверю позже.
 jim01 окт. 2010 г., 20:41
Мне нравится ваше решение, но я думаю, что причастие немного младше, чем ваш ответ. Может быть, пройдитесь по всему процессу организации мероприятия, а затем подпишитесь на него, и я бы поддержал вас ... черт, я бы сказал, чтобы мои друзья поддержали вас, я бы устроил вечеринку Upvote citronas в субботу вечером. :)

Вы хотели получить его на стороне клиента через JavaScript?

getElementById('<%=lblBookId.ClientID%>')

Я бы также порекомендовал получить firebug для firefox, а затем вы можете взглянуть на сгенерированный html веб-страницы. Вы также сможете перейти и отладить свой JavaScript.

если вы пытаетесь найти это на стороне сервера, попробуйте это.

ContentPlaceHolder ph = Page.Master.FindControl("ContentPlaceHolder1");   
UserControl Uc = ph.Controls(0);
FormView fv = up.FindControl("fv");
Label label = fv.FindControl("lblBookId");
label.Text = "Hi there"; 

если это не сработает, вы можете получить идею. продолжайте сверлить, пока не найдете то, что ищете.

 sacrament01 окт. 2010 г., 20:46
Спасибо Джим, теперь это работает. спасибо за советы.
 jim01 окт. 2010 г., 20:05
тогда вам нужен ответ Джонниблэйз.
 sacrament01 окт. 2010 г., 20:14
да, но я не могу управлять им, чтобы найти ярлык из веб-управления пользователем на странице содержимого.
 sacrament01 окт. 2010 г., 20:02
Нет, Джим, я не хочу получать из javascript, вместо этого я хочу получить из клиентского кода Default.aspx.cs.

Ваш ответ на вопрос