gpt4 book ai didi

asp.net-mvc - ASP.NET MVC - 将 GET 值附加到每个 URL ... ActionLink?路由?如何?

转载 作者:行者123 更新时间:2023-12-02 06:23:56 29 4
gpt4 key购买 nike

我正在寻找一种优雅的方法来将标记附加到 ASP.NET MVC 应用程序中的每个 URL。例如:

http://mysite.com/?token=81541858

从任何给定的页面,当生成链接时(例如通过 HTML.ActionLink),它应该将现有的标记附加到新的 URL。例如:

HTML.ActionLink("Show me","Detail",new{id=5})

应该产生: http://mysite.com/Product/Detail/5?token=81541858

在保持现有总体设计的同时实现这一目标的最佳方法是什么。 ActionLink 包装器?也许有某种基于路由的解决方案?

最佳答案

可能有更优雅的 MVC/路由解决方案,但一个简单的扩展方法应该可以解决问题:

public static string TokenActionLink(this HtmlHelper html, 
string linkText,
string actionName,
string controllerName,
int id,
int token)
{
var anchorFormat = "<a href=\"{0}\">{1}</a>";
var urlFormat = "{0}/{1}/{2}?token={3}";
return string.Format(anchorFormat, string.Format(urlFormat, controllerName, actionName, id, token.ToString()), linkText);
}

用法:

<%: Html.TokenActionLink("Show Me", "Detail", "Product", Model.Id, Model.Token) %>

或者您可以创建一个自定义的 RouteValueDictionary:,然后从您的自定义方法调用常规的 ActionLink 方法:

public static string TokenActionLink(this HtmlHelper html, 
string linkText,
string actionName,
string controllerName,
int id,
int token)
{
var rvd = new RouteValueDictionary(ViewContext.RouteData.Values);
rvd["Token"] = token.ToString();
return Html.ActionLink(linkText, actionName, controllerName, id, rvd);
}

关于asp.net-mvc - ASP.NET MVC - 将 GET 值附加到每个 URL ... ActionLink?路由?如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4251659/

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