如何在使用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”,不知何故,属性值未传递到postBack操作。
我该如何解开这个谜团?
4条答案
按热度按时间rsaldnfx1#
我认为您遇到的问题是因为属性没有被回发以在服务器端重建它们的信息。
控件的状态是在服务器端生成的,并在提供页面之前存储在
ViewState
中。然后使用javascript修改值,但由于该值不会回发到服务器,因此无效。在回发时,服务器从已知的ViewState
重新生成控件,该ViewState
具有您最初分配的默认值1
。要解决这个问题,您需要将值存储在某种类型的控件中(考虑
HiddenField
控件),该控件将被回发到服务器,然后在服务器端重新构建属性。例如(半伪码):
如果您使用javascript在客户端修改控件,则需要手动处理。
m528fe3b2#
只有表单元素才能回发数据。2服务器端将接收回发数据并将其加载到表单元素中,前提是runat=server已设置。
在标记或html中:
浏览器:
代码隐藏:
6rqinv9w3#
您可以使用属性定义1 o个以上的按钮,这些按钮使用相同的OnClick方法(“ButtonSearchName_Click”)。
然后,您可以强制转换“sender”,以获取已单击的按钮,当然还有属性。
在下面的代码中,还有一个HashSet,用于评估“attribute”的VALUE是否实现。
将属性保存到隐藏字段(或其他字段)中以备将来使用。
mnemlml84#
不需要Javascript下面的代码将为您工作