C# 设置ASP.NET按钮属性客户端和读取属性值服务器端
使用javascript更改属性值后,如何检索C# 设置ASP.NET按钮属性客户端和读取属性值服务器端,c#,javascript,asp.net,postback,custom-attributes,C#,Javascript,Asp.net,Postback,Custom Attributes,使用javascript更改属性值后,如何检索按钮自定义属性 例如: 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 = '#<%
按钮
自定义属性
例如:
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”,不知何故,属性值不会传递给回发操作
我怎样才能解开这个谜团呢?不需要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
}
我认为您遇到的问题是,没有将属性发回服务器端以重新生成其信息 控件的状态构建在服务器端,并在提供页面之前存储在
ViewState
中。然后使用javascript修改该值,但由于该值没有被发回服务器,因此该值无效。回发时,服务器从已知的ViewState
重建控件,该控件具有您最初指定的默认值,即值1
要解决这个问题,您需要将值存储在某种类型的控件中(考虑一个HiddenField
控件),该控件将被发回服务器,然后重新构建属性服务器端
eg(半伪码):
如果使用javascript在客户端修改控件,则需要手动处理该控件。只有表单元素才能实际回发数据。如果设置了runat=server,服务器端将接收回发数据并将其加载到form元素中 在标记或html中:
<input type="hidden" runat="server" ID="txtHiddenDestControl" />
我看到过一个示例,您可以编辑javascript:_postback()操作并将actIndex作为参数发送,但我还没有使它工作,所以我将坚持您的想法,使用隐藏的输入字段。@CeparuStefan如果不工作,请告诉我(我已经测试过,但应该可以)。此外,如果这个答案或任何其他答案对您有所帮助,请不要忘记更新/设置已接受的答案。欢迎来到SO:)你的方法有效。但是我不确定这是否是实现我所要求的最好的方式,所以把你的帖子作为答案是不公平的。我试图给你的帖子投上一票,但它不允许我,因为我是这个网站的新手,我没有足够的分数。不管怎样,在找到更好的解决方案之前,我一直在使用这个解决方案。@CeparuStefan你找到另一个解决方案了吗?
<input type="hidden" runat="server" ID="txtHiddenDestControl" />
document.getElementById('<%= txtHiddenDestControl.ClientID %>').value = '1';
string postedVal = txtHiddenDestControl.Value.ToString();