加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 从控制器内部使用Html.ActionLink和Url.Action(

发布时间:2020-12-15 22:55:15 所属栏目:asp.Net 来源:网络整理
导读:我想写一个 HtmlHelper来渲染具有预设值的ActionLink,例如. %=Html.PageLink("Page 1","page-slug");% 其中PageLink是使用已知的Action和Controller调用ActionLink的函数,例如. “索引”和“页面”. 由于HtmlHelper和UrlHelper不存在于Controller或类中,如何
我想写一个 HtmlHelper来渲染具有预设值的ActionLink,例如.
<%=Html.PageLink("Page 1","page-slug");%>

其中PageLink是使用已知的Action和Controller调用ActionLink的函数,例如. “索引”和“页面”.

由于HtmlHelper和UrlHelper不存在于Controller或类中,如何从类中获取相对URL?

更新:鉴于现在我已经有了三年累积的经验,这里是我的建议:只需使用Html.ActionLink(“我的链接”,新的{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);
        }
    }
}

关于从类中获取URL的问题,取决于你将实现什么样的类.例如,如果要从HtmlHelper扩展名获取当前控制器和操作,可以使用:

string currentControllerName = (string)helper.ViewContext
    .RouteData.Values["controller"];
string currentActionName = (string)helper.ViewContext
    .RouteData.Values["action"];

如果要从控制器获取它,可以使用基类(Controller)中的属性/方法来构建URL.例如:

var url = new UrlHelper(this.ControllerContext.RequestContext);
url.Action(an_action_name,route_values);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读