asp.net mvc: 将 RedirectToAction(string, object) 变成 RedirectToAction<Controller>(x => x.Deta

Posted

技术标签:

【中文标题】asp.net mvc: 将 RedirectToAction(string, object) 变成 RedirectToAction<Controller>(x => x.Detail(id))【英文标题】:asp.net mvc: make RedirectToAction(string, object) into RedirectToAction<Controller>(x => x.Detail(id)) 【发布时间】:2011-01-07 08:21:09 【问题描述】:

任何人都知道如何创建一个方法(我将把它放在扩展类中),它与 mvc 的 RedirectToAction 一样,只使用表达式(没有魔术字符串)。

所以不要写这样的东西:

 RedirectToAction("Detail", 
    new RouteValueDictionary  "messageId", messageId);

我会这样做:

this.RedirectToAction(x => x.Detail(messageId));

我尝试并做了类似的事情,但我不知道如何添加参数:

 public static RedirectToRouteResult RedirectToAction<T>(this T controller,
     Expression<Action<T>> expression)
 
     return RedirectToAction(
        (expression.Body as MethodCallExpression).Method.Name
     );
 

【问题讨论】:

【参考方案1】:

MvcContrib 有它:http://mvccontrib.codeplex.com/wikipage?title=RedirectToAction

【讨论】:

啊啊,贡献不是期货。 +1 这个contrib在mvc2上,我还在用mvc 1 MVC1 版本也在那里,例如mvccontrib.codeplex.com/Release/…。【参考方案2】:

http://www.clariusconsulting.net/blogs/kzu/archive/2008/04/07/59274.aspx

另外,我相信他们在 1.0 发布时将类型安全的 htmlHelper 扩展移到了 MVC Futures 程序集中,但是我现在似乎找不到它。

【讨论】:

以上是关于asp.net mvc: 将 RedirectToAction(string, object) 变成 RedirectToAction<Controller>(x => x.Deta的主要内容,如果未能解决你的问题,请参考以下文章

如何先用asp.net身份框架数据库将asp.net mvc迁移到asp.net core

ASP.NET MVC教程五:ASP.NET MVC中的路由

ASP.NET MVC Area使用-将Area设置成独立项目

ASP.NET MVC Area使用-将Area设置成独立项目

ASP.NET (MVC) 服务图像

ASP.Net MVC 路由映射