ASP.NET MVC部分查看ajaxpost?

Index.html(查看)

@Html.Action("_AddCategory", "Categories")

_AddCategory.cshtml(PartialView)

  $(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 () { } }); }); });  @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); } } 

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

我怎样才能做到这一点? 如何使用AJAXpost路由另一个页面?

不要从使用AJAX调用的控制器操作重定向。 这毫无用处。 您可以将要重定向的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响应头来自动推断类型并相应地解析传递给成功回调的结果参数。

您所做的ajax调用不应该能够重定向整个页面。 它仅将数据返回到异步调用。 如果你想进行重定向,我

javascript的重定向方式是window.location

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

  

在你的action方法中,不是返回部分或重定向,而是返回Json(true);

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