1

编辑最终:以防万一其他人看到这种行为,我想解释一下我的工作。我在我的母版页上为下面描述的网络表单使用了占位符。我在母版页 OnInit 事件的占位符中添加了一个服务器控件。通过排除过程,我发现只有当我将此服务器控件添加到母版页时才会发生下面描述的行为。

titlebarPlaceHolder.Controls.Add(sctitlebar)

我重新编写了母版页,不需要添加服务器控件,并且下面描述的行为消失了。我不知道是什么原因造成的。这是一个简单的服务器控件,但这是我的工作。

编辑 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>

编辑:在我的测试中,我刚刚注意到,如果我在 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=""。后面的代码只是设置数据源并绑定它,没有别的。

谢谢你。

4

1 回答 1

0

如果您使用第一个列表标记作为占位符并替换后面代码中的内容,我将使用稍微不同的方法在列表标记内添加一个 ASP.NET PlaceHolder,如下所示:

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

在以非特别预期的方式使用 ASP.NET 标记时,我在响应代码中遇到了一些不寻常的伪影。这也可能导致您的问题!

于 2013-04-09T22:04:44.913 回答