【问题标题】:Redirection to other page after ajax requestajax请求后重定向到另一个页面
【发布时间】:2015-01-30 22:55:30
【问题描述】:

我有一个表单,用于将数据添加到我的数据库中。我正在使用 Ajax.BeginForm() 将数据发布到控制器,然后执行存储过程来保存数据。如果存储过程无法添加数据并在另一种情况下重定向到其他页面,我想要的结果是显示错误。所以我在控制器中做了这样的事情。

    if (succees)
    {
        return RedirectToAction("ModificationPage", new { id = posted.articleId });
    }
    else
    ViewData["ErrorMessage"] = msg;
    return PartialView("_error");

_error 是一个显示错误消息的简单局部视图。我的问题是,当存储过程添加数据时,不是重定向到修改页面,而是在视图内部渲染了修改页面。 asp mvc中有没有可以解决这个问题的方法

【问题讨论】:

  • Ajax 调用保持在同一页面上。如果你想重定向,那么只需进行标准提交(使用 ajax 并没有真正的好处),然后如果出现错误,添加模型状态错误并返回视图或重定向到错误页面。
  • @StephenMuecke 这是实际使用的,但问题是当出现错误时我必须刷新页面,这需要很多时间,而使用 ajax 我只更新了一小部分页面
  • 不,你不是。您使用 Ajax.BeginForm() 这是一个 ajax 调用。如果您想重定向,只需使用Html.BeginForm() 并执行标准提交。
  • 我的意思是我使用了 Html.BeginForm() 现在我想修改它并使用 Ajax.BeginForm()
  • 您的问题清楚地表明我正在使用 Ajax.BeginForm() 将数据发布到控制器!但是如果你真的在使用Html.BeginForm,那就坚持下去,如果出现错误,添加ModelState 错误并返回视图以显示错误,或者重定向到错误页面以显示错误。

标签: ajax asp.net-mvc asp.net-mvc-4


【解决方案1】:

你可以使用ajaxForm的onSuccess参数

   using( Ajax.BeginForm( "action","controlle",
                   new AjaxOptions( ) {
                       OnSuccess = "mySuccessFunction",
                   } ) ) }

然后在js中

function mySuccessFunction(){
  //check if html with error exist on page
  window.location = "url"
}

【讨论】:

    【解决方案2】:

    RedirectToAction 在 ajax 中不受支持。您可以将重定向 URL 发送回客户端,并从客户端使用 window.location 重定向到新位置。

    【讨论】:

      【解决方案3】:

      你可以在你的控制器中

       if (succees)
          {
              Redirect("/AREA/ContolleurName/ModificationPage/?Id=" + posted.articleId+ ")
      
          }
          else
          ViewData["ErrorMessage"] = msg;
          return PartialView("_error");**strong text**
      

      并在您的控制器中创建操作

      public ActionResult ModificationPage(int Id)
              {
      return //your view 
      }
      

      或者像这样的ajax

          $("class(.test) or Id (#Test)").on("click", function () {
              var id = $(this).attr('id');
      
              /*Création de la chaine en Json...*/
      
              window.location.href = "/AREA/ContolleurName/ModificationPage?Id=" + id  +"";
      
      
           });
      

      【讨论】:

      • 控制器中不可能这样,我已经测试过了
      猜你喜欢
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      相关资源
      最近更新 更多