私のプロジェクトでは、エリア内のビューにURLを作成しようとしています。
コードはこれです:私は、ブラウザで結果を表示すると、生成されたコードは以下の通りですT4MVCは、エリアを使用するときにActionLinkのURLを正しく作成しません。
@Html.ActionLink("Cancel", MVC.MyArea.MyController.Index(), new { @class = "btn" })
:
<a class="btn" href="/MyArea/MyController/MyCurrentAction?Count=3&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D">Cancel</a>
私はT4MVCのコードを探して行って、これがあることがわかりました(T4Extensions
クラス内の)上記のコード生成方法:
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, ActionResult result, object htmlAttributes, string protocol = null, string hostName = null, string fragment = null) {
return htmlHelper.RouteLink(linkText, null, protocol, hostName, fragment, result.GetRouteValueDictionary(), htmlAttributes);
}
どうやら、RouteLink
方法は、Bではありませんresult.GetRouteValueDictionary()
をそのまま使用することができます。
したがって、私はASP.NET MVC source codeをチェックし、同じ機能を複製しようとしました。少なくとも私が行ったテストで、
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, ActionResult result, object htmlAttributes, string protocol = null, string hostName = null, string fragment = null) {
var t4mvcResult = result.GetT4MVCResult();
var actionName = t4mvcResult.Action;
var controllerName = t4mvcResult.Controller;
var routeValues = new RouteValueDictionary(t4mvcResult.RouteValueDictionary);
var htmlAttribs = new RouteValueDictionary(htmlAttributes);
return new MvcHtmlString(HtmlHelper.GenerateLink(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection, linkText, null /* routeName */, actionName, controllerName, protocol, hostName, fragment, routeValues, htmlAttribs));
}
は、今では(もちろん、偉大である)働いているが、私は何か間違ったことをやっていることを恐れている:私はこれに私のT4MVCを変更しましたこの道が先に私にいくつかの問題につながる可能性があるということです。
私があなたが指摘したとおりにメソッドを変更し、修正されました!ちなみに、あなたはT4MVCで素晴らしい仕事をしています。ありがとう! –
ありがとう!さて、修正は、2.7.2の新しいビルド(NuGet上)になったので、更新できるはずです。 –