最近我遇到了以下問題。讓我們假設,我們有以下里面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