脚本管理器的 RegisterStartUpScript(...) 不起作用

3

自从我在ImageButton_Click事件上开始我的新项目以来,我一直使用这个命令,并且在使用这个命令的每个页面上都完美地工作:首先,我检查是否有任何字段为空,如果是,则发送此alert

ScriptManager.RegisterStartupScript(this, typeof(Page), "alert", "alert('No Empty fields are allowed.');", true);  

我在这里的工作是:我有两个文本框,我输入两个日期,这些日期用于填充我的报表查看器。但在进入报表查看器之前,我会检查它是否为空。在此页面上,只有第一次按下按钮时才有效。我使用断点,它通过我的条件IF,但没有显示消息...为什么?
完整的代码在Button_Click事件中:
 if (Txt_Dt_Final.Text == "" || Txt_Dt_Inicial.Text == "")
     {
        ScriptManager.RegisterStartupScript(this, typeof(Page), "alert", "alert('No Empty fields are allowed.');", true);
        Txt_Dt_Inicial.Focus();
        return;
     }

更新
实际上,第一次按下按钮后,什么都不起作用了...即使我输入有效日期,也不起作用...我现在测试了一下,只有在第一次按下按钮时出现错误。
例如:
如果我输入的日期正确,那么我的报告查看器将返回我的报告结果...然后我点击带有空文本框的按钮,它会触发错误并显示消息。如果我再按一次,它就会正常工作!

现在,如果我第一次按下带有空字段的按钮,该按钮将不再起作用!只有在刷新页面后才能恢复正常...为什么?o.O
我的其他页面都运行得很完美。


图片按钮是否在更新面板内? - Andrew Walters
@AndrewWalters 是的,没错。 - Ghaleon
我唯一看到的需要改进的地方是使用一个唯一的ID作为脚本键。ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), Guid.NewGuid().ToString(), "alert('不允许有空字段。');", true);也许这个脚本正在被缓存。 - Andrew Walters
如果其他方法都失败了,你总是可以在页面上使用 .net RequiredFieldValidators。 - Andrew Walters
似乎每次回传都必须注册脚本。我不明白为什么,因为脚本似乎被重复放置了两次。很想知道正确/优雅的答案。 - Leo
1个回答

6

除非您的ASP控件位于更新面板内,否则您的代码应该正常工作。如果是这样,请改用以下方法。

ScriptManager.RegisterStartupScript(updatePanel,updatePanel.GetType()
                                                  , "alert", javaScript, true);

1
但是我一直在UpdatePanel中使用它,而且一直都有效... ;s 我只是不明白为什么只有这种情况出现错误。 - Ghaleon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接