如何在使用 javascript 更改属性值后检索 Button
自定义属性?
例子:
Asp文件
<asp:Button ID="Button1" runat="server" Text="Button1" />
<asp:Button ID="Button2" runat="server" Text="Button2" OnClick="Button2_Click" />
<script type="text/javascript">
var btn1 = '#<% Button1.ClientID %>';
var btn2 = '#<% Button2.ClientID %>';
$(btn1).click(function(e) {
e.preventDefault();
$(btn2).attr("actIndex", "2");
});
</script>
代码隐藏文件
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
Button2.Attributes.Add("actIndex","1");
}
protected void Button2_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
// this should be 2 if button1 has been clicked
string actIndex = btn.Attributes["actIndex"];
}
如果我点击 Button1
然后我点击 Button2
actIndex
值仍然是“1”但是如果我使用页面检查 Button2
actIndex
属性为“2”,不知何故属性值未传递给回发操作。
我该如何解开这个谜团?
最佳答案
我认为您遇到的问题是因为没有回发属性以在服务器端重建它们的信息。
控件的状态是在服务器端构建的,并在提供页面之前存储在 ViewState
中。然后您使用 javascript 修改该值,这没有任何效果,因为该 vaule 没有被回发到服务器。在 PostBack 上,服务器从已知的 ViewState
重建控件,它具有您最初分配的默认值,即值 1
。
要解决这个问题,您需要将值存储在某种类型的控件中(比如 HiddenField
控件),这些控件将被发送回服务器,然后在服务器端重建属性。
例如(半伪代码):
// In your javascript write to a hidden control
$("#yourHiddenFieldControlName").val("2");
// Then in your server side c# code you look for this value on post back and if found,
// assign it to you attribute
if (!string.IsNullOrEmpty(yourHiddenFieldControlName.Value))
{
Button2.Attributes["actIndex"] = yourHiddenFieldControlName.Value;
}
如果您使用 javascript 在客户端修改控件,则需要手动处理控件。
关于c# - 设置 ASP.NET Button 属性客户端和读取属性值服务器端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25507622/