2017-03-23 112 views
1

最近我遇到了以下問題。讓我們假設,我們有以下里面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),但他們沒有任何路由參數。無論如何,這種路由的工作方式很好,並且表現得如預期一樣。唯一的區別是第一個有路由參數,第二個沒有。

+0

你有任何其他操作方法與途徑模式? – Shyju

+0

感謝您的反饋 - 我有另一個GET屬性爲'[Route(「places/add」)]',另一個爲'[Route(「places」)]''。 – smq93

+2

'admin-panel/places/edit/123'應該按照您共享的代碼工作。 – Shyju

回答

0
[Route("places/edit/{placeId: int}")] 

試試這個

+0

雖然這段代碼可能會回答這個問題,但提供關於爲什麼和/或代碼如何回答這個問題的附加上下文會提高它的長期價值。 – manniL