MVC模型绑定与属性路由

时间:2014-04-04 14:47:23

标签: asp.net-mvc-routing

将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
    }
}

1 个答案:

答案 0 :(得分:1)

我认为你应该在POST操作中添加id:

[HttpPost]
[Route("{jobTextID}")]
public RedirectToRouteResult Edit(Guid jobTextID, TextEditViewModel viewModel) { }

资源由URL标识,而不是由请求正文中的参数标识。使用jobTextID从数据库中检索实体,并忽略viewModel中的id。