ASP.Net:如何在回发后维护文本框状态
本文关键字:维护 文本 状态 Net ASP | 更新日期: 2023-09-27 18:18:16
我想知道如何维护在Javascript.
中修改的控件状态我有两个文本框,一个DropDownList和一个按钮(所有Runat=Server(在C#ASP.net 2010 Express.
第一个文本框只是接受用户输入的任何数据。
第二个文本框启用状态将根据 DDL 所选值进行更改。
如果 ddl 选择的值为"-",则第二个文本框将变为启用 = 假。如果不是"-",它将变为启用 = 真。此启用是通过 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 condition(。
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 = "";
}
}
我在按钮点击事件中什么都没有。
通过使用上述所有代码,当我运行项目时,页面加载 Ok。第二个文本框启用状态设置为 False(通过Page_Load事件(。到目前为止还行。
然后从我的浏览器中,我选择 ddl 值到其他而不是"-",文本框由于 javascript 而变为启用。这没关系。
我输入值并单击按钮。页面回发发生在这里。文本框仍处于启用状态(因为我的文本框的 EnableViewState = False(。
我选择 ddl 值为"-",第二个文本框被禁用。
单击按钮,页面回发发生,但这次文本框仍处于启用状态。<<这是我试图解决的问题。我以不同的值更改了EnableViewState,ViewStateMode,但仍然相同。
对此有什么解决方案吗?
这是我的测试图像 URL。状态 1 ,状态 2 ,状态 3
对不起,长帖子。
除了使用额外的HiddenField控件之外,我已经尝试过,但没有找到任何解决方案。
当我在 Javascript 中更新文本框的状态时,我会更新隐藏字段值。在我的页面加载事件中,我检查了所有隐藏字段值,并根据隐藏字段值,我将禁用/启用我的文本框,这对我来说不是一个好的解决方案。
假设我的表单上有 10 或 15 个文本框,我需要有 10 或 15 个隐藏字段来维护客户端操作结果。
目前,这是我唯一的解决方案。
我不确定这是否可以被视为"答案",所以我还没有关闭这个问题。
<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>
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 = "";
}
}
你必须在每次回发时调用你的javascript函数。
if (!IsPostBack)
{
txtKey2.Text = "";
txtKey2.BackColor = System.Drawing.ColorTranslator.FromHtml("#CCCCCC");
txtKey2.Enabled = false;
}
ScriptManager.RegisterClientScriptBlock(this, typeof(System.Web.UI.Page), "MyJSFunction", "EnableSelkey("+selKey1.SelectedValue+",1);", true);
它可能会对您有所帮助,请告诉我以获得进一步的帮助。
我找到了一个有效的解决方案,就是把我放进去的代码放在!IsPostBack 部分,用于直接在页面加载事件中启用和禁用文本框。