首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VB.NET调用Javascript函数。如何在VB.NET完成之前完成javascript函数?

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

Stack Overflow用户
提问于 2015-07-16 03:28:16
回答 2查看 194关注 0票数 0

在web应用程序中,我在VB.Net中使用了一个button_Click方法,以便在单击按钮时发生。

在我的VB.NET方法的顶部有下面这一行:

代码语言:javascript
运行
复制
ScriptManager.RegisterStartupScript(Me, Me.GetType(), "myFunction", "myFunction();", True)

我希望在我的VB.NET脚本继续执行之前完成该脚本。基本上,我希望在VB.NET获取“已验证”的数据并将其插入数据库之前,在我的javascript中完成验证。

EN

回答 2

Stack Overflow用户

发布于 2015-07-16 03:40:23

这暴露了对web表单工作原理的误解。以下是实际发生的情况:

  1. 用户第一次从其浏览器请求您的页面
  2. 您的web服务器运行ASP.Net页面生命周期以便发送html响应
  3. web服务器将销毁用于完成请求的页面类实例。
  4. 来自服务器的响应到达,并由用户的浏览器呈现。

用户单击您的按钮,产生新的http请求。H210<代码>H111浏览器销毁现有的html DOM。请求到达web服务器,然后web服务器再次运行完整的http生命周期,包括Page_Load方法。

  1. 这次请求中包含的数据向ASP.Net表明它也应该运行按钮的单击代码。
  2. 按钮注册当页面在浏览器中加载时运行的javascript。
  3. 页面生命周期完成,并且ASP.Net将其html响应发送回javascript再次销毁页面类实例。
  4. 响应到达浏览器,浏览器通过创建一个全新的HTML DOM从头开始呈现它。

<

  1. >H125页面的javascript load事件被激发,ASP.Net页面中包含的一些javascript启动按钮注册的javascript启动脚本。

我需要指出关于这个过程的一些事情,即步骤3和4、步骤6和7以及步骤11和12之间的顺序是准确的。当浏览器中有可见的工作页面时,服务器已经移动并销毁了用于创建该页面的所有内容(会话变量除外)。当VB.Net代码正在运行时,浏览器甚至还没有页面可供显示。

您应该从中学到的是,在javascript运行时,不仅VB.Net方法已经完成,而且整个页面类已经被销毁。对于浏览器的web页面和VB.Net页面类实例,这里都有一个连续性的概念,但这是不会发生的。所有这些都以一种主要对用户透明的方式发生,这真是太好了。

幸运的是,有一些事情可以避免这个完整的过程。您可能会考虑对页面的一部分使用UpdatePanel,更改按钮以触发WebMethod,或者首先将更多的VB.Net代码转换为javascript。然而,所有这些都可能需要对页面的工作方式进行重大的重新思考。在这种情况下,您可能会发现和验证控件最适合您的需要。

票数 1
EN

Stack Overflow用户

发布于 2015-07-16 04:17:42

这里假设myFunction是一个存在于客户端的javascript函数。它将在客户端调用myFunction

代码语言:javascript
运行
复制
<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代码。这是验证器的意义所在。

代码语言:javascript
运行
复制
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;
    }
}

希望这能让你振作起来。如果有什么不对劲,需要更多帮助,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31439376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档