繁体   English   中英

执行 C# 代码并注册 JavaScript 启动脚本时,如何停止页面刷新?

[英]How do I stop a page refresh when C# code behind is executed and a JavaScript startup script is registered?

我有一个在 c# 后面执行代码的按钮。 后面的代码从数据库中获取一些信息,并编写一段相当长的 JavaScript,然后注册并在客户端上运行。 后面的代码如下所示:

protected void Button1_Click(object sender, EventArgs e)
{
   System.Text.StringBuilder sb = new System.Text.StringBuilder();
   sb.Append(@"
        <script language='javascript'>
        //Lots of JavaScript
       </script>");
   System.Web.UI.ScriptManager.RegisterStartupScript(this, this.GetType(), "JCall1", sb.ToString(), false);
}

该代码可以正常工作并执行应有的操作。 问题在于按下按钮和执行 JavaScript 之间,我得到一个页面重新加载 flash。 我想停止那个 flash。 我可以说它发生在 JavaScript 执行之前,因为我在 JavaScript 中做的第一件事就是启动一个处理图标。 它在解决/处理一些承诺时旋转。 flash 发生在图标开始处理之前。 一旦 JavaScript 启动(图标出现并旋转),一切都很好。 这可能是我在此按钮的生命周期中不了解的内容。 我推测当我 RegisterStartupScript 时,页面正在刷新以加载新脚本。 我无法在 JavaScript 客户端中完成所有操作,因为需要将内部数据提供给 API。 是的,如果该站点是 .Net Core 并且我可以在 Razor 页面中完成所有操作,那就太好了,但这不是我要处理的。 它是网络表单。 我可能对此无能为力,但如果有的话,我可以寻求帮助。

我认为您正在寻找的是按钮单击以异步执行。 这篇其他 SO 帖子应该可以帮助您根据需要制作它: Calling async method on button click

是的,如果该站点是 .Net Core 并且我可以在 Razor 页面中完成所有操作,那就太好了,但这不是我要处理的。

撇开不恰当的讽刺不谈,现代 Asp.Net MVC Core 应用程序和旧版 WebForms 中的答案都是相同的:您在此处编写的任何内容都没有暗示服务器端代码,因此不要将其放在服务器端。

如果你想处理一个按钮并让它执行一些 JavaScript 代码(即,在客户端,这就是你的块正在做的事情),只需在客户端注册一个处理程序并在那里编写你的 JS 代码:

$('#<%= Button1.ClientID %>').click(function() {
    // code here
});

因为否则你所做的事情在很多层面上都是错误的,其中最重要的是ScriptManager.RegisterStartupScript通过在页面本身插入一个<script>标记来工作,你应该很明显它需要重新加载整个页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM