【问题标题】:odd behavior when when changing linkbutton text更改链接按钮文本时的奇怪行为
【发布时间】:2013-02-04 18:13:33
【问题描述】:

在我的项目中,我有一个数据中继器,在更新面板中,带有一个链接按钮。当用户单击链接按钮时,会发生部分回发并更改链接按钮的文本属性。问题是:当用户再次单击同一个按钮时,即使我可以在网页上实际看到新的文本值,但当调试器命中事件时,发送者对象说文本值是旧值,而不是最后一个更新。有谁知道为什么?代码如下:

<asp:LinkButton runat="server" ID="lbEdit" Text="Edit" EnableViewState="true"  OnClick="edit_click" CommandArgument='<%# Eval("user.networkId") %>'></asp:LinkButton>

代码隐藏:

  Protected Sub edit_click(ByVal sender As Object, ByVal e As EventArgs)
    Dim btn As LinkButton = CType(sender, LinkButton)
    Dim userId As String = btn.CommandArgument
    If (btn.Text = "Edit") Then
       btn.Text = "Save"
    else
       btn.Text = "Edit"
    end if
  end sub

【问题讨论】:

  • 测试一下,如果你注释掉更新面板,让页面做一个完整的回发,你有同样的问题吗?
  • Brian,是的,即使我不使用更新面板,问题仍然存在

标签: asp.net vb.net


【解决方案1】:

您很可能在回发时重新绑定数据,因此它正在重置您的值。然后按钮单击事件正在触发,所以是的,您正确设置了Text。但是当你再次回发时,文本会被重置。

将您的DataBind 事件包装在If Not IsPostBack 中:

If Not IsPostBack
    'Bind your datasource
End If 

【讨论】:

  • 感谢您的回复迈克。你的意思是我的中继器的数据绑定?问题是,因为我使用的是更新面板,所以我想继续绑定,即使它是(并且将是)回发。
  • @jason 是的,对于您的中继器。如果您在上面添加该代码,您有什么问题?在大多数情况下,您不需要在回发时重新绑定数据。
  • Mike,此用户控件中的大多数操作都会导致更新面板触发(导致部分回发)。例如,我的数据重复器有行和列(一个表)。当用户单击列标题时,我对回发的转发器进行排序并重新绑定到转发器。如果我只绑定回发,我将无法做到这一点。
  • @jason 我明白了。您是否考虑过使用GridView 之类的东西来代替中继器?甚至jQuery Datatables 提供排序/过滤(不需要回发)?无论如何,请考虑将您的转发器代码添加到问题中,以便您处理的所有内容都很清楚。
  • 感谢您的帮助。我最终做的只是为每一行添加另一个链接按钮。一个说“编辑”并且没有隐藏,另一个说“保存”并且被隐藏。当用户单击“编辑”时,我只是交换 css 样式,隐藏“编辑”并显示“保存”。
猜你喜欢
  • 1970-01-01
  • 2013-12-12
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
相关资源
最近更新 更多