【问题标题】:Redirecting to error page if a partial view encounters an error [duplicate]如果部分视图遇到错误,则重定向到错误页面[重复]
【发布时间】:2011-09-06 14:56:25
【问题描述】:

我在视图中渲染局部视图:

@{
    Html.RenderAction("PartialViewAction", "SomeController");
}  

如果局部视图操作遇到错误,有没有办法将用户重定向到错误页面?

编辑:我正在寻找一种服务器端的重定向。此局部视图未使用 AJAX 加载。它在服务器端呈现为“大”视图。 “大”视图不知道局部视图出错了。

【问题讨论】:

    标签: asp.net-mvc-3 c#-4.0


    【解决方案1】:

    根据您的逻辑,您可以通过使用jQuery.ajax() 处理错误来控制您的应用程序流程。

    // this will render the GET request on page load
    $(function() {
        $.ajax({
            url: '/Some/PartialViewAction',
            type: 'GET',
            dataType: 'json',                            /*edit*/
            success: function(xhr_data) {                /*edit*/
                // the following assumes you wrap 
                // your partial view in div id="myDiv"
                $('#myDiv').html(xhr_data.html);         /*edit*/
                $('#myErrorDiv').html(xhr_data.error);   /*edit*/
            },
            error: function() {
                window.location.href='/Some/Error';
                // or similar page redirecting technique
            }
        });
    });
    

    这将处理 GET 中的错误,但当然,如果您要在操作方法中返回一些 JSON 或其他指示符,您可以在 success 回调函数中使用相同的 window.location.href...

    编辑

    另请参阅上面对$.ajax的编辑

    你的控制器可以做这样的事情:

    public ActionResult PartialViewAction() {
        // handle error
        string message = "Evacuate, Immediately!";
        // not certain the html will render correctly,
        // but you could encode/parse/whatever easily enough
        return Json(new { html = "<div>some html</div>", error = message },
            JsonRequestBehavior.AllowGet);
    }
    

    【讨论】:

    • 谢谢!我得到了 AJAX 覆盖。我稍微编辑了我的问题以更具体。
    • @Dimskiy 如果错误存在于 Ajax 请求中,我认为如果没有某种客户端交互,您将无法处理重定向。
    • 我认为必须有某种方式。但是好的,如果局部视图遇到错误并且它在服务器上被记录和处理怎么办。现在,要做的最后一件事是在 UI 中显示某种用户友好的消息。你会怎么做呢?
    • @Dimskiy 您仍然需要在部分回发中包装并返回该数据。您可以使用 JSON,也可以将部分视图的 HTML 包装在一个变量中,并将一些消息包装在另一个变量中。我将编辑演示。
    • 在这种情况下,为什么不直接创建一个特殊的“错误部分视图”而不是“硬编码”html 到 JSON 对象,并在出现错误的情况下渲染它呢?我认为这会比构建 JSON 和所有内容更好。
    猜你喜欢
    • 1970-01-01
    • 2010-12-16
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多