从内部控制器使用Html.ActionLink和Url.Action(...)
-
26-09-2019 - |
题
欲写的HtmlHelper来呈现与ActionLink的预先设定的值,例如
<%=Html.PageLink("Page 1", "page-slug");%>
其中PageLink
是调用与已知的操作和控制器,例如ActionLink
的功能。 “索引” 和 “页”。
由于HtmlHelper
和UrlHelper
没有一个Controller
或类中存在,如何从一个类中获得相对URL行动?
更新:由于额外的三年累积经验我现在有,这是我的建议是:只使用Html.ActionLink("My Link", new { controller = "Page", slug = "page-slug" })
或更好,但
<a href="@Url.Action("ViewPage",
new {
controller = "Page",
slug = "my-page-slug" })">My Link</a>
您延伸方法可以是可爱和短暂的,但它增加了一个未测试的点的失败和对员工一种新的学习要求,而无需任何添加任何实际价值。把它看成是设计一个复杂的系统。为什么要添加其他运动部件,除非它增加了可靠性(无),可读性(小,一旦你读的更多的文档),速度(无)或并发(无)。
解决方案
不知道其实我明白你的问题清楚了,但是,让我试试。
要像你描述的创建一个扩展的HtmlHelper,你可以试试:
using System;
using System.Web.Mvc;
using System.Web.Mvc.Html;
namespace Something {
public static class PageLinkHelper
{
public static string PageLink(
this HtmlHelper helper,
string linkText, string actionName,
string controllerName, object routeValues,
object htmlAttributes)
{
return helper.ActionLink(
linkText, actionName, controllerName,
routeValues, htmlAttributes);
}
}
}
对于从一个类获得一个网址你的问题,要看是什么样的阶级,你会实现它。例如,如果你想从扩展的HtmlHelper电流控制器和行动,你可以使用:
string currentControllerName = (string)helper.ViewContext
.RouteData.Values["controller"];
string currentActionName = (string)helper.ViewContext
.RouteData.Values["action"];
如果您想从控制器得到它,可以使用属性/从基类(控制器)方法建立的URL。例如:
var url = new UrlHelper(this.ControllerContext.RequestContext);
url.Action(an_action_name, route_values);
不隶属于 StackOverflow