Javascript 用HTML.begin通知MVC 4重定向问题
我有以下顾虑(可能正在寻找一种不同的方法)。我有一个表格,我发送给一个返回void的post控制器。我的表单使用以下格式:Javascript 用HTML.begin通知MVC 4重定向问题,javascript,jquery,forms,asp.net-mvc-4,razor,Javascript,Jquery,Forms,Asp.net Mvc 4,Razor,我有以下顾虑(可能正在寻找一种不同的方法)。我有一个表格,我发送给一个返回void的post控制器。我的表单使用以下格式: using (Html.BeginForm("Action", "Controller", FormMethod.Post, new { id = "frm", area = "MyArea" })) 我确实需要这些参数,以便所有其他事情都能正常工作,但问题是,在我的表单提交后,它会尝试重定向到该控制器/操作,因为它是一个无效操作,所以我会得到一个空白页。我有一些java
using (Html.BeginForm("Action", "Controller", FormMethod.Post, new { id = "frm", area = "MyArea" }))
我确实需要这些参数,以便所有其他事情都能正常工作,但问题是,在我的表单提交后,它会尝试重定向到该控制器/操作,因为它是一个无效操作,所以我会得到一个空白页。我有一些javascript用于submit按钮的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…而不是表单持有的post操作(Controller/action)并在onclick事件(successfulDialog)中执行检查 “我想重定向到Controller2/Action2…而不是表单包含的后期操作(Controller/action)。” 如果我理解了这条语句,您希望发布到Controller/Action,然后重定向到Controller2/Action2。要执行此操作,请从post操作返回RedirectToAction
public ActionResult Action(MyViewModel vm)
{
if(ModelState.IsValid)
{
//do whatever, save to database
return RedirectToAction("Action2", "Controller");
}
//error
return View();
}
为什么不将返回类型从
void
设置为ActionResult
,然后将其发送回您的Index()或其他地方(使用return RedirectToAction(“Index”);
)呢我考虑过这一点,但是,如果这样做,我就无法发布引导模式(我的successfulSave函数)您是否正在尝试实现类似AJAX的功能?或多或少,除了我不认为AJAX表单接受我传递的参数之外,是吗?这个方法完全符合我的要求,只是它重定向到错误的操作。是的,您可以将参数发送到AjaxForm。如果是我,我只需要创建一些jQuery来创建一个AJAX请求,然后将您的方法从void
更改为JsonResult
,然后它将成为一个真正的AJAX请求。MVC的ajax功能也可以使用,但有一个轻微的学习曲线。我不认为你能用一个简单的形式做你想做的事情;这需要AJAX,但我想显示或完成onclick事件下完成的工作。显示successfulSave消息,这样您将向他们显示成功消息3秒钟,然后执行重定向?那么我同意其他人的看法。我将连接到表单提交事件,防止默认提交行为发生,并使用$.ajax处理成功事件。Ajax.BeginForm有一个成功的事件,但我想你会发现它的所有默认行为都会干扰你正在尝试做的事情。这可能是最好的办法。我将在beforeSend上显示confirm,在成功后,我将只包括重定向,在成功时显示successfulSave对话框。我感谢你的帮助:)