我想将MarriageById
称为GET,如下所示:
var url = '/MarriageById?id=' + id;
但我也希望有一个ActionResult Marriage(Marriage marriage)
在显示视图之前进行一些处理。第二个必须是POST
,因为它还将从asp。
我正在尝试this solution(请参阅下面我自己的实现),但它仍然被重定向为GET并且找不到ActionResult Marriage
:
[HttpGet]
public ActionResult MarriageById(int id)
{
var marriage = _marriageRepository.GetById(id);
return RedirectToAction(nameof(Marriage), marriage);
}
[HttpPost]
public ActionResult Marriage(Marriage marriage)
{
var people = _personRepository.GetAll();
ViewBag.men = Utils.GetPersonsSelectListByGender(people, isMale: true);
ViewBag.women = Utils.GetPersonsSelectListByGender(people, isMale: false);
return View(marriage);
}
答案 0 :(得分:4)
使用RedirectToAction
始终意味着GET,因此无法使用仅接受POST的Marriage
操作方法。
然而,自己调用另一种方法没有任何问题,它仍然是一种与其他方法一样的方法。所以试试这个:
return Marriage(marriage);
并且旁注:如果Marriage
方法始终只用于显示数据,从不来保存,存储或更改数据,那么使用POST不是最好的选择。 POST通常意味着带有副作用的调用(保存,存储,更改甚至删除),一般来说,最好坚持使用该约定。
答案 1 :(得分:1)
我认为你不应该将GET与POST动词混合使用。它们只是在语义上不同。 如果您要为这两种方法执行类似的功能,可能不是从GET调用POST,而是可能需要提取其他“私有”方法或甚至层(取决于用例)的公共部分。 / p>
希望它有意义