ASP.NET MVC属性路由 - 参数始终为null

时间:2017-03-23 19:53:58

标签: c# asp.net asp.net-mvc asp.net-mvc-4 attributerouting

最近我遇到了以下问题。让我们假设我们内部有以下控制器:

[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),但它们没有任何路由参数。无论如何,这种路由工作得很好,并且行为与预期一致唯一的区别是第一个有路由参数而第二个没有。

2 个答案:

答案 0 :(得分:0)

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

试试这个

答案 1 :(得分:0)

可以在路线中使用可选参数,如下所示:

[Route("places/edit/{placeId?}")]

(编辑) https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/#optionals-and-defaults