欲写的HtmlHelper来呈现与ActionLink的预先设定的值,例如

<%=Html.PageLink("Page 1", "page-slug");%>

其中PageLink是调用与已知的操作和控制器,例如ActionLink的功能。 “索引” 和 “页”。

由于HtmlHelperUrlHelper没有一个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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top