设置ASP.NET Button属性客户端和读取属性值服务器端

在使用javascript更改属性值后,如何检索Button自定义属性?

例:

Asp文件

    var btn1 = '#'; var btn2 = '#'; $(btn1).click(function(e) { e.preventDefault(); $(btn2).attr("actIndex", "2"); });  

CodeBehind文件

 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然后单击Button2actIndex值仍为“1”,但如果我使用页面检查Button2 actIndex属性为“2”,则某种方式属性值不会传递给postBack操作。

我该如何解开这个谜团?

我认为你遇到的问题是因为没有回发属性以重建服务器端的信息。

控件的状态是服务器端构建的,并在提供页面之前存储在ViewState 。 然后使用javascript修改该值,该值无效,因为该vaule未被回发到服务器。 在PostBack上,服务器从已知的ViewState重建控件,该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修改客户端,则需要手动处理您的控件。

只有表单元素才能实际回发数据。 如果设置了runat = server,服务器端将获取回发数据并将其加载到表单元素中。

在标记或HTML中:

  

JavaScript的:

 document.getElementById('<%= txtHiddenDestControl.ClientID %>').value = '1'; 

代码背后:

 string postedVal = txtHiddenDestControl.Value.ToString(); 

不需要Javascript下面的代码将适合您

  protected void Page_Load(object sender, EventArgs e) { Button2.Attributes.Add("actIndex", "1"); } protected void Button1_Click(object sender, EventArgs e) { string Value = Button2.Attributes["actIndex"].ToString();//1 Button2.Attributes.Remove("actIndex"); Button2.Attributes.Add("actIndex", "2"); Value = Button2.Attributes["actIndex"].ToString();//2 }