设置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
然后单击Button2
, actIndex
值仍为“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 }