gpt4 book ai didi

javascript - ASP.NET MVC 部分 View ajax 帖子?

转载 作者:可可西里 更新时间:2023-11-01 01:36:45 26 4
gpt4 key购买 nike

Index.html( View )

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

_AddCategory.cshtml(局部 View )

<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
}

Controller

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

问题:如果操作成功,我希望重定向到另一个页面(类别)。但是没有任何 Action ,也没有错误信息。如果操作不成功,它会像我预期的那样工作。

我该怎么做?如何使用 AJAX 帖子路由另一个页面?

最佳答案

不要从使用 AJAX 调用的 Controller 操作重定向。没用的。您可以将要重定向到的 url 作为 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);
}
}

然后在客户端测试此 url 的存在并采取相应的行动:

$.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 () {

}
});

另请注意,我已从您的 $.ajax() 调用中删除了 dataType: 'json' 参数。这非常重要,因为我们并不总是返回 JSON(在您的情况下,您从未返回 JSON,因此此参数绝对错误)。在我的示例中,我们仅在成功的情况下返回 JSON,在失败的情况下返回 text/html (PartialView)。因此,您应该让 jQuery 简单地使用服务器返回的 Content-Type HTTP 响应 header 来自动推断类型并相应地解析传递给成功回调的结果参数。

关于javascript - ASP.NET MVC 部分 View ajax 帖子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14667274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com