将MVC 3应用程序转换为MVC 5并完全依赖于属性路由。一切都很好,但我无法为接受(不是那么)复杂对象作为参数的控制器方法定义路由。
如果省略路径中的参数,我的控制器/方法永远不会被调用,我收到404(正如我所料)。当我在路由中包含viewModel
参数时,我的方法被调用但参数始终为null
。
此代码在使用“经典”路由之前已经过罚款,并且不需要特定的路由来模拟绑定我的viewModel
参数。除了包含控制器和方法名称之外,我从未将其定义为任何路径的一部分。视图没有变化。
[RoutePrefix("Text")]
[Route("{action}")]
public class TextController : Controller
{
[HttpGet]
[Route("{jobTextID}")]
public ViewResult Edit(Guid jobTextID)
{
// this (get) works fine
}
[HttpPost]
[Route("{viewModel}"]
public RedirectToRouteResult Edit(TextEditViewModel viewModel)
{
// viewModel is always null
}
}
答案 0 :(得分:1)
我认为你应该在POST操作中添加id:
[HttpPost]
[Route("{jobTextID}")]
public RedirectToRouteResult Edit(Guid jobTextID, TextEditViewModel viewModel) { }
资源由URL标识,而不是由请求正文中的参数标识。使用jobTextID
从数据库中检索实体,并忽略viewModel中的id。