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

标签 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>

代码隐藏文件

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”,不知何故属性值未传递给回发操作。

我该如何解开这个谜团?

最佳答案

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

控件的状态是在服务器端构建的,并在提供页面之前存储在 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 在客户端修改控件,则需要手动处理控件。

关于c# - 设置 ASP.NET Button 属性客户端和读取属性值服务器端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25507622/

相关文章:

c# - 是否可以重载同名的 Func<T, TResult> 和 Func<T1, T2, TResult> ?

javascript - 将 setTimeOut 绑定(bind)到具有特定元素的某个函数

javascript - 复选框确认消息 - 如果为 false,则保持选中状态

c# - Response.WriteFile 两次写入内容

css - Rotativa PDF 文件中缺少图像

c# - 有没有比使用字符串数组更好的方法来组织这些数据?

c# - Akka.NET 无法识别我的自定义记录器并默认为 BusLogger

javascript - 每 60 秒刷新一次 JSON 存储 - EXT JS 4

c# - 如何从 ASP.NET Web API ValueProvider 中的 HTTP POST 请求检索正文值?

c# - 渐变作为按钮边框颜色 Xamarin Android?