最近我遇到了以下问题。让我们假设我们内部有以下控制器:
[RoutePrefix("admin-panel")]
public class AdminPanelController : Controller
{
[Route("places/edit/{placeId}")]
public ActionResult EditPlace(int? placeId)
{
return View("EditPlace", new EditPlaceViewModel(...));
}
}
现在我们可以通过url访问此方法:
(...)/管理面板/地点/编辑/ 123
问题是 placeId 参数始终为 null 。
如果我将 EditPlace 方法路由规则更改为以下内容:
[RoutePrefix("admin-panel")]
public class AdminPanelController : Controller
{
[Route("places/{placeId}/edit")]
public ActionResult EditPlace(int? placeId)
{
return View("EditPlace", new EditPlaceViewModel(...));
}
}
一切正常开始 - placeId 参数正在顺利通过。
我在这里缺少什么?为什么我不能使用第一个解决方案?
提前致谢!
@Update
好的,我错过了我的POST方法,其路由规则如下:
[HttpPost]
[Route("places/edit/{placeId}")]
[MultipleSubmitButton(Name = "action", Argument = "NextEditStep")]
public ActionResult NextEditStep(int? placeId, EditPlaceViewModel model)
{
// do some operations with posted model
return View("EditPlace", new EditPlaceViewModel(...));
}
[HttpPost]
[Route("places/edit/{placeId}")]
[MultipleSubmitButton(Name = "action", Argument = "PreviousEditStep")]
public ActionResult PreviousEditStep(int? placeId, EditPlaceViewModel model)
{
// do some operations with posted model
return View("EditPlace", new EditPlaceViewModel(...));
}
如果我把它们评论出来,问题就会消失,但说实话 - 我需要它才能形成生成。有没有机会让这3种方法具有相同的路由规则?
我有类似的控制器和类似的3种方法(1 GET& 2 POSTS),但它们没有任何路由参数。无论如何,这种路由工作得很好,并且行为与预期一致唯一的区别是第一个有路由参数而第二个没有。
答案 0 :(得分:0)
[Route("places/edit/{placeId: int}")]
试试这个
答案 1 :(得分:0)
可以在路线中使用可选参数,如下所示:
[Route("places/edit/{placeId?}")]