在web应用程序中,我在VB.Net中使用了一个button_Click方法,以便在单击按钮时发生。
在我的VB.NET方法的顶部有下面这一行:
ScriptManager.RegisterStartupScript(Me, Me.GetType(), "myFunction", "myFunction();", True)我希望在我的VB.NET脚本继续执行之前完成该脚本。基本上,我希望在VB.NET获取“已验证”的数据并将其插入数据库之前,在我的javascript中完成验证。
发布于 2015-07-16 03:40:23
这暴露了对web表单工作原理的误解。以下是实际发生的情况:
用户单击您的按钮,产生新的http请求。H210<代码>H111浏览器销毁现有的html DOM。请求到达web服务器,然后web服务器再次运行完整的http生命周期,包括Page_Load方法。
<
我需要指出关于这个过程的一些事情,即步骤3和4、步骤6和7以及步骤11和12之间的顺序是准确的。当浏览器中有可见的工作页面时,服务器已经移动并销毁了用于创建该页面的所有内容(会话变量除外)。当VB.Net代码正在运行时,浏览器甚至还没有页面可供显示。
您应该从中学到的是,在javascript运行时,不仅VB.Net方法已经完成,而且整个页面类已经被销毁。对于浏览器的web页面和VB.Net页面类实例,这里都有一个连续性的概念,但这是不会发生的。所有这些都以一种主要对用户透明的方式发生,这真是太好了。
幸运的是,有一些事情可以避免这个完整的过程。您可能会考虑对页面的一部分使用UpdatePanel,更改按钮以触发WebMethod,或者首先将更多的VB.Net代码转换为javascript。然而,所有这些都可能需要对页面的工作方式进行重大的重新思考。在这种情况下,您可能会发现和验证控件最适合您的需要。
发布于 2015-07-16 04:17:42
这里假设myFunction是一个存在于客户端的javascript函数。它将在客户端调用myFunction。
<asp:Button ID="btntest" runat="server" Text="Add Record"/>
<asp:CustomValidator ID="myCustomValidator" runat="server" ControlToValidate="someControl" ErrorMessage="Validation Error" ClientValidationFunction="myFunction"></asp:CustomValidator>这是假设你的javascript也在做一些验证。它看起来就像这样。如果为args.IsValid = false,则验证器将不允许回发,并且不会执行vb.net代码。这是验证器的意义所在。
function myFunction(sender, args) {
var someControl = document.getElementById(sender.controltovalidate).control;
//Let's assume someControl is a textbox and we don't want it bigger than 10
if (someControl.value > 10) {
args.IsValid = false;
} else {
args.IsValid = true;
}
}希望这能让你振作起来。如果有什么不对劲,需要更多帮助,请告诉我。
https://stackoverflow.com/questions/31439376
复制相似问题