Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当抛出异常时,AJAX方法调用会完成吗?_C#_Asp.net_Ajax_Exception - Fatal编程技术网

C# 当抛出异常时,AJAX方法调用会完成吗?

C# 当抛出异常时,AJAX方法调用会完成吗?,c#,asp.net,ajax,exception,C#,Asp.net,Ajax,Exception,在我的菜单中单击菜单项时,将通过asp面板中的AJAX加载ASCX控件。为此,我有一个方法: public void LoadControl(ControlDestination controlDestination, string filename) { try { // Load control from file Control control = LoadControl(filename); // Check contro

在我的菜单中单击菜单项时,将通过asp面板中的AJAX加载ASCX控件。为此,我有一个方法:

public void LoadControl(ControlDestination controlDestination, string filename)
{
    try
    {
        // Load control from file
        Control control = LoadControl(filename);

        // Check control extends BaseForm
          // Do stuff    
        }
        else
        {
            throw new Exception("Web User Control erft niet van BaseForm.");
        }
    }
    catch (ArgumentNullException e)
    {
        // Implement
    }
    catch(HttpException e)
    {
        LoadControl(ControlDestination.Menu, "Error.ascx");
        throw new Exception("User control niet gevonden: " + e.ToString());
    }
}
当我在HttpException上设置断点时,我到达了那里。我按下F11,LoadControl中的代码被执行。然后会弹出例外项。这一切进展顺利,但Error.ascx从未加载。我知道这个方法是有效的,因为当我想通过这个方法加载其他ASCX对象时,它是有效的。但是当我想加载Error.ascx时,它出错了

如果我注释掉抛出新异常用户控件niet gevonden+e.ToString,我可以看到Error.ascx;我想两行都执行

编辑:

在我的母版页中,我使用以下javascript代码捕获一些异常:

function pageLoad() {
    var manager = Sys.WebForms.PageRequestManager.getInstance();
    manager.add_endRequest(endRequest);
    manager.add_beginRequest(beginRequest);
}

function endRequest(sender, args){
    var Error = args.get_error();
    if (Error != null) {
        ToggleErrorOn(true);
        document.getElementById("ErrorContent").innerHTML = Error.message;
        args.set_errorHandled(true);
    }
}

未捕获的异常会导致“更新”面板无法进行任何渲染。相反,它将错误代码中继回显示错误消息的AJAX处理程序

因此,如果继续抛出该异常,则永远不会呈现Error.ascx

更新:


您的javascript捕获异常的时间太晚了。UpdatePanel管道已经认为自己处于错误状态。由codebehind引发但未在codebehind中捕获的任何异常都将导致UpdatePanel删除它将呈现的所有HTML并返回一个简单的错误代码。然后,javascript函数将处理该方法。

在UpdatePanel ASP.NET中触发服务器端方法时,会执行以下操作:

重建页面的部分 在面板内从头开始 通过普通ASP.NET运行 好的,稍微 简略,但接近。 将面板的HTML发回 给客户。 重建面板上的面板 使用javascript-DOM的客户端 操纵 如果在第一步中出现未处理的异常,AJAX调用将失败,并且无法更新原始面板。下面是一张图表:


考虑一下如果在页面加载中抛出未处理的异常会发生什么。在这种情况下,ASP.NET无法完成HTML的构建,在这里也无法完成。

Hmmm,如果加载控件后引发异常,除非调用LoadControl方法时捕获到该异常,否则整个页面都将被“执行”。这是什么意思,我的整个页面将被执行?但当我在调试器中并在异常中设置断点时,代码将被执行。这是为什么?在我的startpost中,我添加了一些javascript代码来处理异常。加载错误控制后,通过抛出异常,您试图实现什么?Thnx作为解释。当发生异常时,我需要做两件事:1.调用一个处理一些UI事情的方法;2。将错误传递给客户端。我在一个覆盖的div中显示错误。我还希望将错误写入数据库。明白了!调用LoadControl后,您可以在HttpException处理程序中完成这两件事,而不是引发异常。我添加了catchException e{LoadControlDestination.Menu,Error.ascx;throw new ExceptionUser control niet gevonden:+e.ToString;}但是我仍然得到相同的错误,并且我的error.ascx没有加载您正在抛出的异常是未捕获的,它会终止AJAX操作。在我的startpost中,我添加了一些处理异常的javascript代码javascript无法处理您的代码隐藏引发的错误。您必须在codebehind中捕获它,否则UpdatePanel将自行中止。