在我的控制器中,我有类似的东西:
[HttoPost]
public ActionResult MyMethod(MyViewModel myViewModel)
{
//...Some logic
return RedirectToAction("SecondMethod", new { ... pupulating view model ... });
}
[HttpGet]
public ActionResult SecondMethod()
{
return RedirectToAction("Index", "SomeOtherController");
}
[HttpPost]
public ActionResult SecondMethod(MyViewModel myViewModel)
{
//...Do Something
return View("MyView", myViewModel);
}
显然,MyMethod动作中的RedirectToAction永远不会调用我需要的HttpPost。问题是,如果我执行以下操作:
return SecondMethod(myViewModel);
相反,浏览器上显示的网址是 ... / ... / ... / MyMethod ,我需要它 ... / ... /.../ SecondMethod
我可以做什么,以便我可以点击HttpPost操作并在浏览器上显示正确的URL?
感谢您的帮助。
答案 0 :(得分:1)
您可以创建一个非操作方法,然后从MyMethod()
和SecondMethod()
调用它:
private void DoStuff()
{
//...Do Something
}
public ActionResult MyMethod(MyViewModel myViewModel)
{
//...Some logic
DoStuff();
return RedirectToAction("SecondMethod", new { ... pupulating view model ... });
}
[HttpGet]
public ActionResult SecondMethod()
{
return RedirectToAction("Index", "SomeOtherController");
}
[HttpPost]
public ActionResult SecondMethod(MyViewModel myViewModel)
{
DoStuff();
return View("MyView", myViewModel);
}
答案 1 :(得分:0)
听起来你实际上并不需要HttpPost;您只需要在相应的HttpGet操作中使用该方法的功能,该操作接受MyViewModel
的实例,并返回由该模型填充的视图。听起来不错吗?
如果是这样,请尝试以下方法:
[HttpGet]
[ActionName("SecondMethod")]
public ActionResult SecondMethodWithViewModel(MyViewModel myViewModel)
{
return View("MyView", myViewModel);
}
您可以使用ActionNameAttribute
重载您的操作,因为您无法声明与HttpPost操作具有相同签名的其他方法。 RedirectToAction()
调用和网址将尊重您在此属性中设置的值,因此您可以根据需要为方法命名。
答案 2 :(得分:0)
如果您要发布到操作,则需要POST到该操作。我的建议是改变行动发生的方法。如果它是通过单击按钮启动的,那么在页面上单独发布多个表单或者在提交使用JavaScript来更改发布表单的操作属性之前会更简单。