[英]How to prevent a Javascript disabled button from re-enabling after postback?
下面的代码示例演示了该问题。 单击Button1时,将通过JavaScript禁用Button3。 单击Button2会导致服务器事件初始化回发。 回发后,Button3不再被禁用。
ASPX
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestDisableButton.aspx.cs" Inherits="StudentForms_CaseManagement_TestDisableButton" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script language="javascript" type="text/javascript">
function Button1_onclick() {
document.getElementById("<%= Button3.ClientID %>").disabled = true;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="Button1" type="button" value="Disable Button 3" onclick="return Button1_onclick()" />
<asp:Button ID="Button2" runat="server" Text="Perform Post Back" onclick="Button2_Click" />
<asp:Button ID="Button3" runat="server" Text="Button3" />
<br />
<asp:Label ID="Label1" runat="server" ></asp:Label>
</div>
</form>
</body>
</html>
代码背后
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class StudentForms_CaseManagement_TestDisableButton : System.Web.UI.Page
{
protected void Button2_Click(object sender, EventArgs e)
{
Label1.Text = "Button 2 clicked";
}
}
该按钮将根据其最新状态(存储在ViewState
,从服务器到浏览器再回到服务器)在服务器端重新创建,并根据发布的值进行创建。
问题是禁用状态处于ViewState
并且您无法在客户端上对其进行修改。 唯一发布的值是控件本身的值(例如,文本框中的文本)。
因此,由于您无法修改ViewState
,因此唯一的选择是在窗体中具有一个额外的控件,以便允许将禁用状态发布回服务器。 因此,您需要添加HiddenField
,在客户端设置其状态(在启用/禁用按钮的同一脚本中),然后在服务器端恢复回发的值并将其应用于控件。 即,读取隐藏字段值,并相应地设置按钮的Enabled
属性。
回发时禁用Button3
protected void Button2_Click(object sender, EventArgs e)
{
Button3.Enabled = false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.