ASP.NET MVC局部视图阿贾克斯后?(ASP.NET MVC Partial view aja

2019-07-19 03:59发布

index.html的(查看)

<div class="categories_content_container">
    @Html.Action("_AddCategory", "Categories")
</div>

_AddCategory.cshtml(PartialView)

<script>
    $(document).ready(function () {
        $('input[type=submit]').click(function (e) {
            e.preventDefault();
            $.ajax({
                type: "POST",
                url: '@Url.Action("_AddCategory", "Categories")',
                dataType: "json",
                data: $('form').serialize(),
                success: function (result) {
                    $(".categories_content_container").html(result);
                },
                error: function () {

                }
            });
        });
    });
</script>

@using (Html.BeginForm())
{
    // form elements
}

调节器

[HttpPost]
public ActionResult _AddCategory(CategoriesViewModel viewModel)
{
    if(//success)
    {
        // DbOperations...
        return RedirectToAction("Categories");
    }
    else
    {
        // model state is not valid...
        return PartialView(viewModel);
    }
}

问:如果操作成功,我希望重定向到另一个页面(类别)。 但是,没有动作,没有错误消息。 如果操作不顺利,它正在像我的预期。

我怎样才能做到这一点? 我的路线使用AJAX后另一页如何?

Answer 1:

不要从被调用时AJAX控制器动作重定向。 这毫无用处。 你可以回到你想重定向到一个JsonResult的网址:

[HttpPost]
public ActionResult _AddCategory(CategoriesViewModel viewModel)
{
    if(//success)
    {
        // DbOperations...
        return Json(new { redirectTo = Url.Action("Categories") });
    }
    else
    {
        // model state is not valid...
        return PartialView(viewModel);
    }
}

然后在这个网址和做相应存在的客户端测试:

$.ajax({
    type: "POST",
    url: '@Url.Action("_AddCategory", "Categories")',
    data: $('form').serialize(),
    success: function (result) {
        if (result.redirectTo) { 
            // The operation was a success on the server as it returned
            // a JSON objet with an url property pointing to the location
            // you would like to redirect to => now use the window.location.href
            // property to redirect the client to this location
            window.location.href = result.redirectTo;
        } else {
            // The server returned a partial view => let's refresh
            // the corresponding section of our DOM with it
            $(".categories_content_container").html(result);
        }
    },
    error: function () {

    }
});

还要注意,我已清除的dataType: 'json'参数从$.ajax()调用。 这是非常重要的,因为我们并不总是返回JSON(你的情况,你再也不会回到JSON因此这个参数是绝对错误的)。 在我的例子,我们只在成功的情况下返回JSON text/html在失败的情况下(PartialView)。 所以,你应该离开的jQuery只需使用Content-Type由服务器返回的HTTP响应头,自动推断的类型和解析传递给你的成功回调相应的结果参数。



Answer 2:

你让Ajax调用不应该是能够将整个页面重定向。 它返回的数据只有你的异步调用。 如果要执行重定向,我

重定向的JavaScript的方法是用了window.location

所以,你的Ajax调用应该是这样的:

<script>
    $(document).ready(function () {
        $('input[type=submit]').click(function (e) {
            e.preventDefault();
            $.ajax({
                type: "POST",
                url: '@Url.Action("_AddCategory", "Categories")',
                dataType: "json",
                data: $('form').serialize(),
                success: function (result) {
                    window.location='@Url.Action("Categories")';
                },
                error: function () {

                }
            });
        });
    });
</script>

在你的操作方法,而不是返回的部分或重定向,返回JSON(真);

public ActionResult _AddCategory(CategoriesViewModel viewModel)
{
    if(//success)
    {
        return Json(true);
    }
    else
    {
        return Json(false);
    }
}


文章来源: ASP.NET MVC Partial view ajax post?