gpt4 book ai didi

asp.net-mvc-3 - 将 MvcContrib 的强类型 RedirectToAction 与 anchor 标记(hashtag)一起使用?

转载 作者:行者123 更新时间:2023-12-02 05:29:42 25 4
gpt4 key购买 nike

我正在使用 MvcContrib 的强类型 RedirectToAction() 从一个 Controller 操作重定向到另一个 Controller 操作,同时避免在我的应用程序流程中使用魔法字符串,如下所示:

this.RedirectToAction<FooController>(c => c.Bar());

然后重定向到

/foo/bar/    

...但现在我希望能够重定向到末尾带有 anchor /主题标签的 URL,并将窗口滚动到 <a name="yarrr" />标签,像这样:

/foo/bar/#yarrr  

我可以将主题标签放在 TempData[] 中,将其写入 javascript 变量并通过 javascript 滚动窗口 - 但我宁愿遵循惯例并将主题标签作为我的 URL 的末尾。

对此有什么想法或自制的解决方案吗?MvcContrib 似乎不支持它。

最佳答案

我不知道 MvcContrib 中存在这样的 ActionLink 重载,但编写一个是微不足道的:

using System;
using System.Linq.Expressions;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Web.Routing;

public static class HtmlExtensions
{
public static IHtmlString ActionLink<TController>(
this HtmlHelper html,
Expression<Action<TController>> action,
string linkText,
object htmlAttributes,
string fragment
) where TController : Controller
{
var routeValues = Microsoft.Web.Mvc.Internal.ExpressionHelper
.GetRouteValuesFromExpression(action);
return html.RouteLink(
linkText: linkText,
routeName: null,
protocol: null,
hostName: null,
fragment: fragment,
routeValues: routeValues,
htmlAttributes: new RouteValueDictionary(htmlAttributes)
);
}
}

然后在你看来:

@(Html.ActionLink<FooController>(c => c.Bar(), "click me", null, "yarrr"))

更新:

显然我误解了你的问题,因为你在 Controller 中寻找 RedirectToAction 方法,而不是在 View 中。我的回答与之前相同:我不知道 MvcContrib 中存在这样的 RedirectToAction 重载,但编写一个是微不足道的:

using System;
using System.Linq.Expressions;
using System.Web.Mvc;

public static class HtmlExtensions
{
public static RedirectResult RedirectToAction<TController>(
this Controller controller,
Expression<Action<TController>> action,
string fragment
) where TController : Controller
{
var routeValues = Microsoft.Web.Mvc.Internal.ExpressionHelper
.GetRouteValuesFromExpression(action);
var urlHelper = new UrlHelper(controller.ControllerContext.RequestContext);
return new RedirectResult(
UrlHelper.GenerateUrl(
routeName: null,
actionName: null,
controllerName: null,
protocol: null,
hostName: null,
fragment: fragment,
routeValues: routeValues,
routeCollection: urlHelper.RouteCollection,
requestContext: controller.ControllerContext.RequestContext,
includeImplicitMvcValues: true
)
);
}
}

然后在你的 Controller 中:

public class HomeController : Controller
{
public ActionResult Index()
{
return this.RedirectToAction<FooController>(c => c.Bar(), "yarrr");
}
}

关于asp.net-mvc-3 - 将 MvcContrib 的强类型 RedirectToAction 与 anchor 标记(hashtag)一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12583956/

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