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

对不起,长帖子。

ASP.Net:如何在回发后维护文本框状态

除了使用额外的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 部分,用于直接在页面加载事件中启用和禁用文本框。