带有runat =“server”的ASP.NET锚标签表现得很奇怪

时间:2010-04-26 20:45:12

标签: asp.net html

我正在设计的页面有一个奇怪的问题。我有这样一个链接:

<a id="asel1" runat="server" href="#"><img id="isel1" runat="server" src="/Images/selbar/1.jpg" /></a>

当我在结果页面上查看源代码时,我得到了这个:

<a href="../Cards/#" id="ctl00_ContentMainSection_CardsControl1_asel1"><img src="/Images/selbar/1.jpg" id="ctl00_ContentMainSection_CardsControl1_isel1" /></a>

我的目标是以编程方式插入链接(如果它适用于相关页面),并保留href =“#”(如果不是)(基本上是空白锚标记)。但是现在它将把它们带到一个实际的链接,当然这个链接不存在。

如何让它停止这样做?

4 个答案:

答案 0 :(得分:2)

您是如何插入链接的?我刚试过以下内容:

<a id="asel1" runat="server" href="#">
    <img id="isel1" runat="server" src="/Images/selbar/1.jpg" />
</a>

如果您在后面的代码中什么都不做,则链接呈现为:

<a href="#" id="ctl00_MainContent_asel1">
    <img src="/Images/selbar/1.jpg" id="ctl00_MainContent_isel1" />
</a>

如果在Page_Load中定义了href:

protected void Page_Load(object sender, EventArgs e)
{
    asel1.HRef = "../Cards";
}

它将呈现为:

<a href="../Cards" id="ctl00_MainContent_asel1">
    <img src="/Images/selbar/1.jpg" id="ctl00_MainContent_isel1" />
</a> 

其他id重整是预期的行为。

答案 1 :(得分:0)

我知道这是一个老问题,但我也遇到了同样的问题。在我的例子中,锚标记也在ASCX文件(用户控件)中。我发现如果我删除了:

runat="server"
然后问题就解决了。

答案 2 :(得分:0)

我会将href替换为:

<a id="asel1" runat="server" onclick="return false;">
   <img id="isel1" runat="server" src="/Images/selbar/1.jpg" />
</a>

答案 3 :(得分:0)

您正在asp c#中动态插入链接,对吗? 你必须在那里寻找href和id。

在asp中,Control.ClientID值是通过连接控件的ID值和其父控件的UniqueID值生成的。这解释了你的id如何变化。 根据{{​​3}}生成的ID属性的每个部分由ClientIDSeparator属性值分隔。该值始终返回下划线(_)。

这就是你id="ctl00_ContentMainSection_CardsControl1_asel1"

的原因