我在我的項目中使用RouteAttributes,他們正常工作,除了在這種情況下: 我有兩個類似的操作,一個接受兩個int參數,另一個只接受一個。RedirectToAction生成錯誤的URL(查詢字符串參數,而不是routedata參數)
第一個接受兩個參數並使用它們加載一個對象並將其傳遞給View; 第二個只是試圖找到第二個變量的默認值,並重定向到第一個操作,傳遞兩個變量。
問題是,在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