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

时间:2014-08-26 13:55:28

标签: c# javascript asp.net postback custom-attributes

如何在使用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>

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值仍为&#34; 1&#34;但是如果我使用页面检查,Button2 actIndex属性是&#34; 2&#34;,不知何故,属性值不会传递给postBack操作。

我怎样才能解开这个谜团?

3 个答案:

答案 0 :(得分: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修改客户端,则需要手动处理您的控件。

答案 1 :(得分:0)

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

in markup或html:

<input type="hidden" runat="server" ID="txtHiddenDestControl" />

的javascript:

document.getElementById('<%= txtHiddenDestControl.ClientID %>').value = '1';
代码背后的代码:

string postedVal = txtHiddenDestControl.Value.ToString();

答案 2 :(得分:-1)

不需要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

    }