【问题标题】:Textbox disabled automatically after postback回发后自动禁用文本框
【发布时间】:2021-01-18 15:59:15
【问题描述】:

在 ASP.NET 表单中有两个文本框控件。一个控件设置今天的日期,而另一个控件最初禁用。基于日期启用控件(禁用属性)。如果日期是当前日期,则禁用文本框,否则启用控件。效果很好。

现在日期不是今天,并且启用了文本框。但是当单击按钮时,表单被回发并且文本框再次被禁用。我没有在javascript和代码后面的任何其他地方设置启用/禁用设置。我不确定为什么会这样。

if (condition)
{
    $('#txt').prop('disabled', true); }
else
{
    $('#txt').prop('disabled', false);
}

如果有人遇到此类问题以及任何可用的解决方案,请帮助我解决此问题。

【问题讨论】:

  • disabled 属性不会在回发中持久化/重新创建。您需要重新应用(或直接在 HTML 中重新生成) - 最简单的方法是将您的 if (condition) 移动到它自己的函数中,并在更改时调用它(就像我现在假设的那样)以及在 doc.ready 上调用它:@ 987654324@(但在一个单独的函数中,所以它不是“DRY”)
  • @freedomn-m 是的,你是对的。发布此评论作为答案。

标签: javascript c# jquery asp.net


【解决方案1】:

好吧,如果有回发,那为什么不使用后面的代码设置启用呢?

例如:

DateTime dtToday = DateTime.Today;

if (TextBox1.Text == dtToday.ToShortDateString())
    TextBox2.Enabled = false;
else
    TextBox2.Enabled = true;

所以,上面的页面加载应该可以很好地工作。

现在我喜欢客户端代码 (js),但如果这里要发生回发,那么不妨运行后面的代码来管理它。

【讨论】:

  • 回发仅在按钮单击时发生,而不是在文本更改时发生。
  • 如果您为该文本框设置了 autopostback=true,则文本更改将触发回发。但我假设这里点击了一个按钮。我不能说我想要一个帖子只是为了更改文本 - 但如果它在更新面板中,那么这种方法确实很有效,我已经做了很多次了。
猜你喜欢
  • 1970-01-01
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多