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

标签 c# javascript asp.net textbox postback

我想知道如何在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/

相关文章:

c# - Visual Studio中的错误CS0311通用错误

javascript - 带标签的节点,D3.js 中边上的箭头

asp.net - 对于这个 VS 2013 异常,我可以/应该做些什么吗?

c# - 更新数据库中的值 - MVC

jquery - 使用jquery在父页面中查找用户控制面板

c# - 登录后 MVC 重定向

c# - 多个上下文实例化上的 EntityFramework 事务

javascript - 在 iframe 中使用 window.parent.myFunction 是否安全?

javascript - onclick 不应触发表单数据提交

c# - NHibernate 中以只读方式获取的实体存在于 PersistenceContext 中