[英]ASP.NET MVC Attribute Routing - parameter is always null
最近我遇到了以下問題。 讓我們假設我們在內部有以下控制器和GET方法:
[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),但他們沒有任何路由參數。 無論如何,這種路由工作得很好,並且行為與預期一致 唯一的區別是第一個有路由參數而第二個沒有。
[Route("places/edit/{placeId: int}")]
嘗試這個
可以在路由中使用可選參數,如下所示:
[Route("places/edit/{placeId?}")]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.