gpt4 book ai didi

asp.net-mvc-3 - ASP.Net Mvc 3 Url.Action 方法使用来自先前请求的参数值

转载 作者:行者123 更新时间:2023-12-04 01:32:50 25 4
gpt4 key购买 nike

当使用 Url.Action 自动生成 URL 时助手,如果页面包含类似于

@Url.Action("Edit","Student")



预计会生成一个类似 domain/student/edit 的网址并且按预期工作。
但是如果请求的url包含一些参数,比如 domain/student/edit/210 ,即使我没有向 Action 提供任何这样的参数,上面的代码也使用了上一个请求中的这些参数并生成了类似的东西。方法。

简而言之,如果请求的 url 包含任何参数,则页面的任何自动生成的链接(为该请求提供服务)也将包含这些参数,无论我是否在 Url.Action 中指定它们。方法。

怎么了?

最佳答案

奇怪,似乎无法重现问题:

public class HomeController : Controller
{
public ActionResult Index(string id)
{
return View();
}

public ActionResult About(string id)
{
return View();
}
}

和内部 Index.cshtml :
@Url.Action("About", "Home")

现在当我请求时 /home/index/123 url 助手生成 /home/about正如预期的那样。没有鬼参数。那么你的场景有什么不同呢?

更新:

现在您已经阐明了您的场景,您似乎有以下几点:
public class HomeController : Controller
{
public ActionResult Index(string id)
{
return View();
}
}

和内部 Index.cshtml您正在尝试使用:
@Url.Action("Index", "Home")

如果您要求 /home/index/123这会生成 /home/index/123而不是预期的 /home/index (或只是 / 考虑到默认值)。

此行为是设计使然。如果你想改变它,你必须编写自己的助手来忽略当前的路线数据。这是它的外观:
@UrlHelper.GenerateUrl(
"Default",
"index",
"home",
null,
Url.RouteCollection,
// That's the important part and it is where we kill the current RouteData
new RequestContext(Html.ViewContext.HttpContext, new RouteData()),
false
)

这将生成您期望的正确网址。这当然是丑陋的。我建议你把它封装成一个可重用的助手。

关于asp.net-mvc-3 - ASP.Net Mvc 3 Url.Action 方法使用来自先前请求的参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6690150/

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