VB.NET调用Javascript函数。如何在VB.NET完成之前完成javascript函数的完成?

时间:2015-07-15 19:28:16

标签: javascript asp.net vb.net

在Web应用程序中,我在VB.Net中使用button_Click方法,在单击按钮时发生。

我在VB.NET方法的顶部有以下行:

ScriptManager.RegisterStartupScript(Me, Me.GetType(), "myFunction", "myFunction();", True)

我希望在我的VB.NET脚本继续之前完成该脚本。基本上,我已经在我的javascript中验证了我想在VB.NET完成"验证"之前完成。数据并将其插入数据库。

2 个答案:

答案 0 :(得分:1)

这背叛了对网络表单如何运作的误解。这是真正发生的事情:

  1. 用户第一次从浏览器请求您的网页
  2. 您的网络服务器运行ASP.Net页面生命周期以发送HTML回复
  3. 网络服务器销毁用于完成请求的网页类实例
  4. 来自服务器的响应到达并由用户的浏览器呈现。
  5. 用户点击您的按钮,产生新的http请求。
  6. 浏览器销毁现有的html DOM
  7. 请求到达Web服务器,然后再次运行完整的ASP.Net生命周期,包括Page_Load方法
  8. 这次请求中包含的数据向ASP.Net表明它还应该运行按钮的点击代码。
  9. 按钮注册javascript,以便在浏览器中加载页面时运行。
  10. 页面生命周期完成,ASP.Net将其HTML响应发送回浏览器。
  11. ASP.Net再次破坏页面类实例。
  12. 响应到达浏览器,通过创建全新的html DOM 从头开始呈现。
  13. 页面的javascript加载事件会触发,ASP.Net页面中包含的一些javascript会启动按钮注册的javascript启动脚本。
  14. 我需要指出一些关于这个过程的事情,即步骤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;
    }
}

希望这能让你前进。如果有什么东西不能正常工作你需要更多的帮助,请告诉我。