【问题标题】:Link Button disappears when Post Back occurs回发时链接按钮消失
【发布时间】:2016-08-08 17:54:47
【问题描述】:

我创建了一个链接按钮并在上面放了一张图片。

这是我的代码:

<asp:LinkButton ID="LinkButton1" runat="server" Text="">
        <asp:Image ID="Image1" ImageUrl="" runat="server" />
</asp:LinkButton>

这是我后续的 C# 代码:

if(!Page.IsPostBack)
{
   LinkButton1.OnClientClick = "ClientClick()";
   Image1.ImageUrl = "~/Images/embed.png";
}

我从图像后面的 c# 代码中提供 ImageUrl,并从链接按钮的 c# 代码中添加 OnClientClick 事件。当页面第一次加载时,按钮会正确显示。

我的浏览器在回发之前渲染了 HTML

<a onclick="ClientClick();" id="MainContent_LinkButton1" 
href="javascript:__doPostBack('ctl00$MainContent$LinkButton1','')">
<img id="MainContent_Image1" src="Images/embed.png">
</a>

当我按下此页面中的任何按钮并发生 PostBack 时,该按钮会消失,但我没有在我的代码中为 PostBack 按钮执行任何操作。

我的浏览器在回传后呈现 HTML

<a onclick="ClientClick();" id="MainContent_LinkButton1" 
href="javascript:__doPostBack('ctl00$MainContent$LinkButton1','')">
</a>

如果我没有为链接按钮添加 OnClientClick 或文本,则图像不会消失。或者如果我将链接按钮的 ViewState 设置为 false,则图像不会消失。那么为什么当页面是 PostBack 时这个按钮会消失呢?

【问题讨论】:

标签: c# html asp.net


【解决方案1】:

使用EnableViewState="true",此代码即使在回发并显示图像时也能正常工作

<asp:LinkButton ID="LinkButton1" runat="server" Text="">
        <asp:Image ID="Image1" ImageUrl="" runat="server" />
</asp:LinkButton>


if(!Page.IsPostBack)
{
   LinkButton1.OnClientClick = "ClientClick()";
   Image1.ImageUrl = "~/Images/embed.png";
}

对于EnableViewState="false",您必须删除IsPostBack,因为它没有保存在任何地方,您需要重新添加它

// remove that check if EnableViewState is false
//if(!Page.IsPostBack)
{
   LinkButton1.OnClientClick = "ClientClick()";
   Image1.ImageUrl = "~/Images/embed.png";
}

【讨论】:

  • 嗨@Aristos 我应用了你所说的第一步。我对视图状态什么都不做。我只是添加 OnclientClick 并为图像按钮提供 ImageUrl 并发生问题。
  • @GaziEnosis 您在某处禁用了视图状态。或者您可能有其他代码可以重置 img。无论如何,我在这里所说的就是这样——毫无疑问。因此,请查看并搜索您的代码中的错误
  • 我不会在任何地方禁用视图状态。我只是创建了一个新的 WebForm 项目。只需添加我在问题中提到的这行代码。
  • @GaziEnosis 好的,然后删除 IsPostBack,它将起作用
  • 现在我的 .cs 页面是:protected void Page_Load(object sender, EventArgs e) { LinkBut​​ton1.OnClientClick = "ClientClick()"; Image1.ImageUrl = "~/Images/embed.png";在我的 .aspx 页面中是: asp:LinkBut​​ton> LinkBut​​ton​​ton> 但是当我点击 LinkBut​​ton2 并且 PostBack 发生时,直到按钮消失。
【解决方案2】:

这是因为 Postback 清除了您对 asp.net 页面的所有控制。

要保留先前加载的控件,您需要确保在“Button_click”上重新执行 Page_Load() 中的任何代码,这会导致回发。

void button_click()
{
// do stuff

page_load(Dummy Object);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-09
    • 2011-05-03
    • 1970-01-01
    • 2015-06-05
    • 2018-09-09
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    相关资源
    最近更新 更多