使用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() );
}
我一直在寻找并且没有发现任何相关的内容..谢谢!
答案 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的博客中获得一些想法。