最近我遇到了以下问题。让我们假设,我们有以下里面GET方法控制:ASP.NET MVC Attribute Routing - 参数始终为空
[RoutePrefix("admin-panel")]
public class AdminPanelController : Controller
{
[Route("places/edit/{placeId}")]
public ActionResult EditPlace(int? placeId)
{
return View("EditPlace", new EditPlaceViewModel(...));
}
}
现在我们可以通过URL来访问这个方法:
(...)/管理面板/地/编辑/ 123
的问题是,placeId参数始终是空。
如果我改变EditPlace方法路由规则如下:
[RoutePrefix("admin-panel")]
public class AdminPanelController : Controller
{
[Route("places/{placeId}/edit")]
public ActionResult EditPlace(int? placeId)
{
return View("EditPlace", new EditPlaceViewModel(...));
}
}
一切都开始正常工作 - placeId参数被successfuly通过。
我在这里错过了什么?为什么我不能使用第一个解决方案?
在此先感谢!
@Update
OK,我已经错过了,我有看起来像相同的路由规则的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种方法(1 GET & 2 POSTS),但他们没有任何路由参数。无论如何,这种路由的工作方式很好,并且表现得如预期一样。唯一的区别是第一个有路由参数,第二个没有。
你有任何其他操作方法与途径模式? – Shyju
感谢您的反馈 - 我有另一个GET属性为'[Route(“places/add”)]',另一个为'[Route(“places”)]''。 – smq93
'admin-panel/places/edit/123'应该按照您共享的代码工作。 – Shyju