2015-09-26 4 views
0
.

. Я боролся с этим в течение нескольких дней, пытаясь получить доступ к вводу html, т. Е. Флажкам или текстовым полям, созданным во время выполнения на основе результатов БД. Мой HTML, который добавляется в качестве буквального управления к осинам заполнителю выглядит следующим образом:Доступ к HTML-сообщениям для обратной передачи в ASP.NET.

<div class='cart-item'> 
    <div class='product-name'> <h3>gold baseball figure</h3></div> 
    <img src='Graphics/gold-trophy.png'></img> 
    <div class='inventory-short-description'> <p>A finely crafted gold plated baseball figuring to top your choice of trophey base (sold seperatly).</p></div>   
    <div class='clear'></div> 
    <div class='item-price'><p>$22.95</p></div> 
    <div class='cart-item-checkbox'><label><input type='checkbox' id='1' name='1' runat='server'/> Select </label> 
    <a href='products.aspx?viewItem=1'>view item </a></div></div 

Вопрос в том, как получить доступ к этому флажку в .cs коде позади страницы?

Мой код, который генерирует этот html и добавляет его на страницу, находится в переопределенном методе OnInit. Глядя на placeholder на postback показывает, что флажок находится в буквальном контроле.

Я пробовал:

Page.FindControl() returns null when searching for dynamic control

ASP.NET page_init event?

FindControl() return null

http://forums.asp.net/t/1336244.aspx?finding+HTML+control

.... И многие другие.

Вчера я использовал хакерский способ установить значение этих флажков в скрытое поле asp.net, используя jquery. Мои коллеги (все разработчики java) говорят, что это неправильный способ доступа к этим элементам. Есть ли способ лучше? Я начинаю думать, что я закодировал себя в месте, из которого я не могу выбраться.

Спасибо за помощь.

+0

почему бы не использовать элементы управления ASP на странице ASPX? –

+0

Не известно, сколько результатов будет возвращено из БД. Они добавляются на странице Init. –

+0

вы можете использовать asp: ретранслятор, который будет повторять элементы управления в шаблоне, когда Databound –

ответ

2

В вашем .aspx

<asp:Repeater ID="rptItems" runat="server" EnableViewState="False"> 
     <ItemTemplate> 
       <asp:TextBox ID="txtName" runat="server" /> 
     </ItemTemplate> 
</asp:Repeater> 

В вашем .aspx.cs файл, который вы можете получить доступ к ретранслятору в обратной передаче событий, как показано ниже

foreach (RepeaterItem rptItem in rptItems.Items) 
     { 
      TextBox txtName = (TextBox)rptItem.FindControl("txtName"); 
      if (txtName != null) { System.Diagnostics.Debug.Write(txtName.Text); }   
     } 
+0

как получить доступ к этому текстовому окну. В вашем примере будет 20 текстовых полей с одинаковым идентификатором. Также VS дает ошибку, когда я пытаюсь установить идентификатор с чем-то вроде ID = «<% # getProductId()%>» Ошибка Свойство ID элемента управления может быть установлено только с помощью атрибута ID в теге и простое значение. Пример:

+0

У вас может быть управление кнопками asp: button на вашей странице и в цикле событий button_click через элементы повторителя –

+0

, также нельзя ссылаться на общедоступные методы этого объекта. Публикация полей не является хорошим программированием, как показано здесь: http: //code.runnable.com/UjMj269qAWwQAAB3/asp-net-how-to-use-repeater –

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