表达式样式使用MVCContrib查看(..)

时间:2010-12-04 21:42:03

标签: asp.net-mvc mvccontrib

使用MVCContrib,您可以轻松执行RedirectToAction调用,例如

this.RedirectToAction( c => c.List() );

其中List是所述控制器中的动作结果。有没有办法做同样的,但使用“查看”方法?即

this.View( c => c.List(), viewModel );

这是一个微不足道但又完整的例子:

[HttpGet]
public ActionResult Profile()
{
    return View( new ProfileViewModel() )
}

[HttpPost]
public ActionResult Profile( ProfilePostModel postModel )
{
    if( !ModelState.IsValid )
        return this.View( c => c.Profile(), postModel.MapToViewModel() );
    _service.Save(postModel.MapToDtoObject() );
    return this.RedirectToAction( c => c.SomeOtherAction() );
}

我一直在寻找并且没有发现任何相关的内容..谢谢!

2 个答案:

答案 0 :(得分:2)

我不知道MVCContrib中是否存在这样的方法,但写一个方法是微不足道的:

public static class ControllerExtensions
{
    public static ViewResult View<T>(
        this T controller, 
        Expression<Func<T, ActionResult>> expression, 
        object model
    ) where T : Controller
    {
        var mce = expression.Body as MethodCallExpression;
        if (mce == null)
        {
            throw new NotSupportedException();
        }
        var result = new ViewResult();
        result.ViewName = mce.Method.Name;
        result.ViewData.Model = model;
        return result;
    }
}

答案 1 :(得分:0)

由于没有代表视图本身的代码,我不认为这可以开箱即用。 如果您创建有关如何选择渲染视图的约定,则可以实现类似的操作。 你可以从this post Jimmy Bogard的博客中获得一些想法。