내 프로젝트에서 RouteAttributes를 사용하고 있는데이 경우를 제외하고는 올바르게 작동합니다. 두 개의 비슷한 동작이 있는데 한 개는 두 개의 int 매개 변수를 허용하고 다른 한 개는 다른 동작 하나만 받아 들인다.RedirectToAction이 잘못된 url (routedata param 대신 querystring 매개 변수)을 생성합니다.
첫 번째 매개 변수는 두 매개 변수를 사용하여 개체를로드하고이를보기에 전달합니다. 두 번째 변수는 두 번째 변수에 대한 기본값을 찾으려고 시도하고 첫 번째 작업으로 리디렉션하여 두 변수를 전달합니다.
ActionResultExample(int idVar1)
에있는 문제는 ControllerExample/Edit/idVar1/Brands/idVar2
으로 리디렉션 될 것으로 예상됩니다. 그러나 나는 ControllerExample/Edit/idVar1/Brands?idVar2=idVar2
으로 리다이렉트되었다. 이것은 물론 무한 리다이렉션 루프를 생성합니다.
[Route("ControllerExample/Edit/{idVar1}/Brands/{idVar2}")]
public ActionResult ActionResultExample(int idVar1, int idVar2)
{
var objectForView= ObjectController.Get(idVar1, idVar2);
return View("ActionResultExample", objectForView);
}
[Route("ControllerExample/Edit/{idVar1}/Brands")]
public ActionResult ActionResultExample(int idVar1)
{
...
var idVar2 = getDefaultVar2();
return RedirectToAction("ActionResultExample", //redirects to ControllerExample/Edit/idVar1/Brands?idVar2=idVar2 instead of ControllerExample/Edit/idVar1/Brands/idVar2
new {idVar1= idVar1, idVar2 = idVar2 });
}
이미 첫 번째 솔루션을 사용했습니다. 나는 단지 그것을 두 가지 다른 행동으로 구분하여 더 명확하게 보이기를 원했습니다. 가장 완벽한 답변을 원합니다. 감사! –
두 번째 작업의 이름을 'ActionResultExample' 이외의 것으로 변경하면 작동합니까? 기술적으로, 귀하의 오버로드 MVC 컨트롤러에 대한 불법입니다 (내 대답은 링크 참조) – danludwig