gpt4 book ai didi

asp.net-mvc - 从 Controller 内部使用 Html.ActionLink 和 Url.Action(...)

转载 作者:行者123 更新时间:2023-12-04 00:43:17 27 4
gpt4 key购买 nike

我想编写一个 HtmlHelper 来呈现具有预设值的 ActionLink,例如。

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

哪里 PageLink是一个调用 ActionLink 的函数具有已知的 Action 和 Controller ,例如。 “索引”和“页面”。

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>

你的扩展方法可能既可爱又简短,但它增加了另一个未经测试的失败点和新的员工学习要求,而没有增加任何真正的值(value)。把它想象成设计一个复杂的系统。为什么要添加另一个事件部分,除非它增加了可靠性(无)、可读性(很少,一旦你阅读更多文档)、速度(无)或并发性(无)。

最佳答案

不确定我是否真的清楚地理解了您的问题,但是,让我尝试一下。

要像您描述的那样创建 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 扩展中获取当前 Controller 和操作,您可以使用:
string currentControllerName = (string)helper.ViewContext
.RouteData.Values["controller"];
string currentActionName = (string)helper.ViewContext
.RouteData.Values["action"];

如果你想从 Controller 获取它,你可以使用基类 (Controller) 中的属性/方法来构建 URL。例如:
var url = new UrlHelper(this.ControllerContext.RequestContext);
url.Action(an_action_name, route_values);

关于asp.net-mvc - 从 Controller 内部使用 Html.ActionLink 和 Url.Action(...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2617064/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com