【问题标题】:Redirect issue with HTML.BeginForm MVC 4HTML.BeginForm MVC 4 的重定向问题
【发布时间】:2013-08-02 18:12:33
【问题描述】:

我有以下顾虑(也许正在寻找不同的方法来做到这一点)。我有一个表单,我发送给一个返回 void 的 post 控制器。我的表单使用以下格式:

using (Html.BeginForm("Action", "Controller", FormMethod.Post, new { id = "frm", area = "MyArea" }))

我确实需要这些参数才能使所有其他事情正常工作,但问题是在我的表单提交后,它会尝试重定向到该控制器/动作,并且由于它是无效动作,所以我得到一个空白页。我有一些 javascript 用于提交按钮的 onclick 事件,该按钮包含我想要重定向到的位置:

onclick='var promise = Dialog("Confirm:", "Are you sure you wan to proceed? ","", "frm"); 
                  promise.fail(function () 
                      {successfulSave("Error!", "There was a problem processing your request");});
                promise.done(function () 
{ $("#frm").submit(); successfulSave("Success!", "Locale Saved Successfully"); 
       setTimeout(function() {window.location.href="@Url.Action("Action2", "Controller", new {area = "MyArea"})";}, 3000);});'

我想重定向到 Controller2/Action2...而不是表单保存的发布操作 (Controller/Action) 并在 onclick 事件 (successfulDialog) 中执行检查。

【问题讨论】:

  • 为什么不将返回类型从 void 设置为 ActionResult 并将其发送回您的 Index() 或其他东西(使用 return RedirectToAction("Index");
  • 我想过这个,但是,如果我这样做,我无法发布引导模式(我的成功保存功能)
  • 您是否正在尝试实现类似 AJAX 的功能?
  • 或多或少,除非我认为 ajax 表单不接受我传递的参数,对吗?这个方法完全符合我的要求,只是它重定向到不正确的操作
  • 是的,您可以向 AjaxForm 发送参数。如果是我,我会简单地创建一些 jQuery 来创建 AJAX 请求,然后将您的方法从 void 更改为 JsonResult,然后这将是一个真正的 AJAX 请求。 MVC 的 ajax 东西也可以工作,但是学习曲线有点小。我不认为你可以用一个简单的表格来做你想做的事情。这将需要 AJAX 或其他。

标签: javascript jquery forms asp.net-mvc-4 razor


【解决方案1】:

“我想重定向到 Controller2/Action2...而不是表单保存的发布操作 (Controller/Action)。”

如果我理解这句话,你想发布到Controller/Action,然后重定向到Controller2/Action2。为此,您从发布操作返回 RedirectToAction。

public ActionResult Action(MyViewModel vm)
{
   if(ModelState.IsValid)
   {
      //do whatever, save to database
      return RedirectToAction("Action2", "Controller");
   }

   //error
   return View();
}

【讨论】:

  • 我想显示或完成在 onclick 事件下完成的工作。显示成功保存消息
  • 所以你要向他们展示 3 秒的成功信息,然后进行重定向?
  • 那我同意别人的看法。我将连接到表单提交事件,preventdefault 以防止发生默认提交行为,并使用 $.ajax 以便您可以处理成功事件。 Ajax.BeginForm 有一个成功事件,但我认为您会发现它的所有默认行为都会干扰您尝试执行的操作。
  • 好吧,如果我别无选择,那我就去做。这可能是最好的方法。我将在 beforeSend 上显示确认,在 afterSuccess 上我将只包含重定向,在成功时对话框成功保存。感谢您的帮助:)
猜你喜欢
  • 2010-11-03
  • 2021-11-01
  • 2014-06-03
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多