2013-04-09 2 views
1

EDIT Final: На случай, если кто-то еще увидит это поведение, я хотел бы объяснить свою работу. Я использовал местозаполнитель на моей главной странице для веб-формы, описанной ниже. Я добавил серверный элемент управления в местозаполнитель в событии OnInit главной страницы. Через процесс устранения я понял, что описанное ниже поведение происходит только тогда, когда я добавляю этот серверный элемент управления на главную страницу.Linkbutton в ASP.NET MasterPage и дочерний элемент управления данными Webform, создающий дополнительный href = ""

titlebarPlaceHolder.Controls.Add(sctitlebar) 

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

EDIT 2: Такое же поведение происходит, когда контейнер представляет собой таблицу, в повторителем:

<asp:Repeater ID="rptAuditList" runat="server"> 
    <ItemTemplate> 
     <tr class="odd"> 
      <td><asp:LinkButton ID="lnkOpenAudit" runat="server" Text='<%# Eval("auditname") %>'></asp:LinkButton> </td> 
     </tr> 
     </ItemTemplate> 
    </asp:Repeater> 

Вот вывод HTML:

<td><a href="" id="contentMain_rptAuditList_lnkOpenAudit_0" href="javascript:__doPostBack(&#39;ctl00$contentMain$rptAuditList$ctl00$lnkOpenAudit&#39;,&#39;&#39;)">Demo PreClose July 2012</a> </td> 

EDIT: В моем тестировании я просто заметил что если я запустил такой же элемент управления OUTSIDE MasterPage, он работал правильно, но если я запустил его внутри MasterPage, он будет вести себя так, как описано ниже.

Я пробовал это с помощью Repeater, DataList и Listview, и результаты всегда одинаковы.

Вот HTML:

<asp:ListView ID="lvwAuditList" runat="server" > 
<LayoutTemplate> 
<ul><li runat="server" id="itemPlaceholder"></li></ul> 
</LayoutTemplate> 
<ItemTemplate> 
<li><asp:LinkButton ID="lnkAudit" runat="server" Text='<%# Eval("auditname") %>' >    
</asp:LinkButton></li> 
</ItemTemplate>    
</asp:ListView> 

Вот результат:

<ul> 
<li><a href="" id="contentMain_lvwAuditList_lnkAudit_0" href="javascript:__doPostBack(&#39;ctl00$contentMain$lvwAuditList$ctrl0$lnkAudit&#39;,&#39;&#39;)">Demo PreClose July 2012</a></li> 
<li><a id="contentMain_lvwAuditList_lnkAudit_1" href="javascript:__doPostBack(&#39;ctl00$contentMain$lvwAuditList$ctrl1$lnkAudit&#39;,&#39;&#39;)">Demo PostClose Audit June 2012</a></li> 
</ul> 

Первая строка всегда имеет дополнительный HREF = "" добавлен. Я никогда раньше этого не видел. Я разделил html и код позади до самого элементарного, но я все еще получаю это дополнительное href = "". Код только устанавливает источник данных и связывает его, ничего другого.

спасибо.

+0

его созданный сервером, чтобы сделать сообщение назад ...... по щелчку ссылки –

+0

да, но почему существуют два href = ""? Один для обратной передачи, но второй - просто пустой. – user2262842

ответ

0

Если вы используете первый список тегов в качестве заполнителя и заменить содержимое в код я хотел бы использовать несколько иной подход добавления ASP.NET PlaceHolder внутри списка тегов следующим образом:

<ul><li><asp:PlaceHolder runat="server" ID="itemPlaceholder" /></li></ul> 

У меня возникли некоторые необычные артефакты, появляющиеся в коде Response при использовании тегов ASP.NET таким образом, чтобы они не были специально предназначены. Возможно, это также вызовет вашу проблему!

+0

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

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