我想知道如何在Javascript中维护已修改的控件状态。
我在 C# ASP.net 2010 Express 中有两个文本框、一个 DropDownList 和一个按钮(所有 Runat=Server)。
第一个文本框只接受用户输入的任何数据。
第二个文本框启用状态将根据 DDL 选择的值而改变。
如果ddl选择的值为“-”,第二个文本框将变为Enabled = False。
如果不是“-”,它将变为 Enabled = True。此启用是通过 Javascript 完成的。
在我的页面加载事件中,我有以下代码。
if (!IsPostBack)
{
txtKey2.Text = "";
txtKey2.BackColor = System.Drawing.ColorTranslator.FromHtml("#CCCCCC");
txtKey2.Enabled = false;
}
在我的 aspx 页面中,我有一些 javascript 可以清除文本框数据并禁用文本框。
这是第二个文本框。
<asp:TextBox ID="txtKey2" runat="server" Width="425px" EnableViewState="False"></asp:TextBox>
这是 DDL。
<asp:DropDownList ID="selKey1" runat="server" onchange="EnableSelkey(this.value,1)">
<asp:ListItem Value="0">-</asp:ListItem>
<asp:ListItem Value="1">AND</asp:ListItem>
<asp:ListItem Value="2">OR</asp:ListItem>
</asp:DropDownList>
这是我的 Javascript 代码。 (我有计划实现其他文本框和 ddl,所以在我的代码中我有 Else if 条件)。
function EnableSelkey(val, strID) {
var txtBox;
if (strID == "1")
txtBox = document.getElementById('<%= txtKey2.ClientID %>');
else if (strID == "2")
txtBox = document.getElementById('<%= txtKey3.ClientID %>');
else
txtBox = document.getElementById('<%= txtKey4.ClientID %>');
if (val != 0) {
txtBox.disabled = false;
txtBox.style.backgroundColor = "White";
txtBox.value = "";
txtBox.select();
}
else {
txtBox.disabled = true;
txtBox.style.backgroundColor = "#CCCCCC";
txtBox.value = "";
}
}
我在按钮点击事件中什么都没有。
通过使用以上所有代码,当我运行项目时,页面加载正常。 第二个文本框启用状态设置为 False(通过 Page_Load 事件)。到目前为止还可以。
然后在我的浏览器中,我选择 ddl 值到其他而不是“-”,文本框因为 javascript 而变为启用。没关系。
我输入值并单击按钮。页面回传发生在这里。文本框仍处于启用状态(因为我的文本框的 EnableViewState = False)。
我选择 ddl 值为“-”,第二个文本框被禁用。
点击按钮,页面回传发生,但此时文本框仍处于启用状态。 << 这是我要解决的问题。我将 EnableViewState、ViewStateMode 更改为不同的值,但仍然相同。
这个有什么解决办法吗?
这是我的测试图像 URL。
State 1 ,
State 2 ,
State 3
抱歉发了这么长的帖子。
最佳答案
除了使用额外的 HiddenField 控件外,我已经尝试并没有找到解决方案。
当我在 Javascript 中更新我的文本框的状态时,我更新了隐藏字段值。 在我的页面加载事件中,我检查了所有隐藏字段值,并根据隐藏字段值,我将禁用/启用我的文本框,这对我来说不是一个好的解决方案。
假设我的表单上有 10 或 15 个文本框,我需要有 10 或 15 个隐藏字段来维护客户端操作结果。
目前,这是我唯一的解决方案。
我不确定这是否可以视为“答案”,所以我还没有结束这个问题。
关于c# - ASP.Net:回发后如何维护文本框状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17104535/