В моем проекте я пытаюсь создать 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
не может использовать result.GetRouteValueDictionary()
, как следует.
Итак, я проверил исходный код ASP.NET MVC и попытался повторить то же самоефункциональность.Я изменил свой T4MVC на это:
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));
}
Теперь он работает (что, конечно, здорово), по крайней мере, для тестов, которые я сделал, но я боюсь, что я делаюВо-первых, что-то не так, и этот путь может привести меня к некоторым проблемам.