在Web应用程序中,我在VB.Net中使用button_Click方法,在单击按钮时发生。
我在VB.NET方法的顶部有以下行:
ScriptManager.RegisterStartupScript(Me, Me.GetType(), "myFunction", "myFunction();", True)
我希望在我的VB.NET脚本继续之前完成该脚本。基本上,我已经在我的javascript中验证了我想在VB.NET完成"验证"之前完成。数据并将其插入数据库。
答案 0 :(得分:1)
这背叛了对网络表单如何运作的误解。这是真正发生的事情:
我需要指出一些关于这个过程的事情,即步骤3和4,步骤6和7以及步骤11和12之间的顺序是准确的。当浏览器中显示工作页面时,服务器已经移动并销毁用于创建该页面的任何内容(会话变量除外)。当VB.Net代码运行时,浏览器甚至还没有要显示的页面。
你应该从中学到的是,在javascript运行的时候,不仅VB.Net方法已经完成了,而且整个页面类已经被破坏了。对于浏览器的网页和没有发生的VB.Net Page类实例,这里有 continuity 的概念。所有这些都以对用户主要透明的方式发生,这很不错。
幸运的是,您可以采取一些措施来避免这个完整的过程。您可能会考虑使用UpdatePanel部分页面,更改按钮以触发WebMethod,或者首先将更多VB.Net代码转换为javascript。但是,所有这些都可能需要对页面的工作方式进行重新思考。在这种情况下,您可能会发现并且验证控件最符合您的需求。
答案 1 :(得分:0)
这假设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;
}
}
希望这能让你前进。如果有什么东西不能正常工作你需要更多的帮助,请告诉我。