asp:LinkBut​​ton的内部图像和文本在回发后消失

时间:2011-04-04 13:39:49

标签: asp.net

我有一个链接按钮:

<asp:LinkButton ID="LinkButtonPrint" runat="server" OnClick="OnPrint_Click">
     <img src="img/print-icon.png" alt="" />
     <asp:Literal runat="server" Text="<%$ Resources:PrintPage %>" />
</asp:LinkButton>

在后面的代码中,我在onclick中添加Page_Load处理程序,如下所示:

LinkButtonPrint.Attributes["onclick"] = "StartLoadTracking(this, '" + GetLocalResourceObject("Loading") + "')";

呈现的HTML如下所示:

<a href="javascript:__doPostBack('ctl00$LinkButtonPrint','')" 
id="ctl00_LinkButtonPrint" onclick="StartLoadTracking(this, 'Loading...');">
    <img alt="" src="img/print-icon.png">Print page
</a>

如果我单击此按钮它正常工作(它将响应PFD文件,因此不会将HTML发送回浏览器),但如果我点击页面上的另一个按钮(这会使一个完整的回发)LinkButtonPrint将没有内部内容,它将呈现如下:

<a href="javascript:__doPostBack('ctl00$LinkButtonPrint','')"  
id="ctl00_LinkButtonPrint" onclick="StartLoadTracking(this, 'Loading...');"></a>

如果我从LinkButtonPrint.Attributes["onclick"] = ...删除Page_Load行,一切正常(除了我的js函数没有被调用,但这是正常的)。

我在这里缺少什么?

修改
这是
的重复 asp.net Link button image not visible after postback
但那个也没有解决:(

4 个答案:

答案 0 :(得分:30)

Microsoft现已知道此问题,他们已在Microsoft Connect issue 718810: LinkButton controls collection lost on postback上发布了正式声明和解决方法。

Microsoft声明是:

  

感谢您的反馈。这似乎是一个奇怪的事实,LinkBut​​ton控件允许通过Text属性或标记中的直接文本内容,或通过Controls集合或标记的子控件。解决方法是使用占位符作为控件的根内容,并将所需的混合内容放在那里,例如。

<asp:LinkButton runat="server">
    <asp:PlaceHolder runat="server">
        This is some text.</br>
        <asp:Label runat="server">This is a control</asp:Label>
    </asp:PlaceHolder>
</asp:LinkButton> 

答案 1 :(得分:14)

我找到了解决方案:
我必须将runat="server"添加到<img>

中的<asp:LinkButton>标记
<img src="img/print-icon.png" alt="" runat="server" />

答案 2 :(得分:1)

只需添加上述解决方案即可。

当我的启用= false (显示禁用的样式)我的链接按钮然后通过另一个控件从页面引起回发时,我发现这种情况特别发生。

链接按钮的.Text组件在回发后被删除。

但是通过在我的.Text / html标签(em,span)上放置runat =“server”,它们现在会在回发后保留。

答案 3 :(得分:0)

问题是属性[“onclick”] = 会覆盖onclick操作的处理程序。

你可以尝试两件事:

LinkButtonPrint.Attributes.Add("onclick", "StartLoadTracking(this, '" + GetLocalResourceObject("Loading") + "');");

LinkButtonPrint.Attributes["onclick"] = "StartLoadTracking(this, '" + GetLocalResourceObject("Loading") + "');" + LinkButtonPrint.Attributes["onclick"];