即使用户离开页面,页面方法也会完成执行吗?

时间:2013-09-17 14:27:34

标签: asp.net pagemethods

我在想。我试着谷歌搜索答案,但他们没有给我答案。感谢。

1 个答案:

答案 0 :(得分:2)

是的,ASP.NET AJAX页面方法将在用户离开页面后继续执行,但结果(如果有的话)将不会返回到页面,因为启动请求的页面现在已经消失。 / p>

例如:

Default.aspx页面上的代码隐藏:

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    [WebMethod]
    public static string GetHelloWorld()
    {
        Thread.Sleep(20000);
        return "Hello World";
    }

    protected void ButtonContactRedirect_OnClick(object sender, EventArgs e)
    {
        Response.Redirect("Contact.aspx");
    }
}

Default.aspx页面上的标记:

<script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
            type: "POST",
            url: "Default.aspx/GetHelloWorld",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                alert(msg);
            }
        });
    });
</script>
<asp:Button runat="server" ID="ButtonContactRedirect" Text="Go to Contacts Page" OnClick="ButtonContactRedirect_OnClick"/>

因此,我们在Default.aspx上有一个按钮,当用户点击它时,该按钮将重定向到另一个页面(Contacts.aspx)。同时,当加载Default.aspx时,对页面方法进行AJAX调用,在返回字符串Hello World之前休眠20秒。

如果你在下一行放置一个断点:

return "Hello World";

当您运行程序并加载页面时,如果您没有单击该按钮20秒,那么将触发AJAX成功回调,并且警报将显示返回的字符串对象。如果在20秒睡眠结束前按下按钮,则Redirect()将会发生,Contacts.aspx页面将加载,但一旦睡眠结束,将触发断点;但是返回的Hello World字符串将丢失,因为AJAX上下文与Default.aspx页面相关联,而不是Contacts.aspx页面,现在已经消失了。