T4MVC与Url.Action()不兼容属性

Rya*_*yan 4 c# asp.net-mvc t4mvc

这是我的原始代码:

@Url.Action("LoginYoutube", "Account", new { returnUrl = Request.QueryString["ReturnUrl"] }, "http")
Run Code Online (Sandbox Code Playgroud)

哪个会生成:http:// localhost:2543/Account/LoginYoutube

使用T4MVC我做:

Url.Action(MVC.Account.LoginYoutube().AddRouteValue("returnUrl", Request.QueryString["ReturnUrl"]))
Run Code Online (Sandbox Code Playgroud)

并生成:/ Account/LoginYoutube

我需要带有"http"的最后一个参数才能获得http:// localhost:2543.问题在于T4MVC我只能为Url.Action()调用放1个参数.

我怎样才能让它发挥作用?

Dav*_*bbo 7

T4MVC确实在这里遗漏了一些东西,但它应该很容易添加.请尝试以下方法.在T4MVC.tt中,更改:

    public static string Action(this UrlHelper urlHelper, ActionResult result) {
        return urlHelper.RouteUrl(result.GetRouteValueDictionary());
    }
Run Code Online (Sandbox Code Playgroud)

    public static string Action(this UrlHelper urlHelper, ActionResult result, string protocol = null, string hostName = null) {
        return urlHelper.RouteUrl(null, result.GetRouteValueDictionary(), protocol, hostName);
    }
Run Code Online (Sandbox Code Playgroud)

这应该允许你写:

 @Url.Action(MVC.Account.LoginYoutube().AddRouteValue("returnUrl", Request.QueryString["ReturnUrl"]), "http")
Run Code Online (Sandbox Code Playgroud)

请让我知道它是如何工作的,所以我们可以决定是否在官方模板中更改它.

  • 我昨晚用这个改变(2.6.55)推了一个新版本. (2认同)