gpt4 book ai didi

c# - MVC 中的参数未从路由正确传递到 View 中

转载 作者:行者123 更新时间:2023-11-30 20:39:07 25 4
gpt4 key购买 nike

我正在自学 MVC,但在正确路由方面遇到了问题

我有一个名为“ClipsController”的 Controller 和 1 个名为“Index”的 View (无聊,我知道)

我的 routeconfig 文件配置了以下路由:

routes.MapRoute(
"Clips",
"Clips/{id}",
new { controller = "Clips", action = "Index", id = urlparameters.Optional }
);

之前“默认”路由。当我去/Clips/ExampleID它确实击中了正确的路线,并且确实在 Clips Controller 中启动了 Index 操作。我遇到的问题是参数“ID”无法传递到索引页面,但我最终进入了 Clips Controller 的索引操作,URL domain.my/Clips/ExampleID

我尝试通过

获取 ID 参数
httpcontext.current.request.querystring["id"]

始终返回空值。我在 Controller 中的操作结果如下:

public ActionResult Index(string id)
{
return view()
}

重申一下,我无法在索引 View 上看到查询字符串 ID,即使 URL 执行正确的路由,并且 Controller 中的 actionresult 对我来说是正确的。如果我做错了什么或者您需要更多信息,请告诉我,谢谢。

最佳答案

I attempt to get the ID parameter with

httpcontext.current.request.querystring["id"]

不,您在此网址中没有任何查询字符串参数:

http://domain.my/Clips/ExampleID

查询字符串参数跟在 url 中的 ? 字符之后。例如,如果您有以下网址:

http://domain.my/Clips?id=ExampleID

然后您可以尝试使用您的初始代码读取 id 查询字符串参数。

使用此网址:http://domain.my/Clips/ExampleID 您可以查询 id 路由值参数。但是使用 HttpContext.Current 绝对是错误的做法。永远不要在 ASP.NET MVC 应用程序中使用 HttpContext.Current。恰恰相反,您可以在任何可以访问 HttpContextBase 的地方访问此信息(在 ASP.NET MVC 应用程序管道中几乎无处不在):

httpContext.Request.RequestContext.RouteData.Values["id"]

长话短说,如果您需要在 Controller 操作中查询此参数的值,您只需使用提供的 id 参数:

public ActionResult Index(string id)
{
// Here the id argument will map to ExampleID
return view()
}

此外,您可能不需要自定义路线:

routes.MapRoute(
"Clips",
"Clips/{id}",
new { controller = "Clips", action = "Index", id = urlparameters.Optional }
);

这完全是多余的,它已经被默认路由覆盖了:

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

因此,请随意摆脱您的自定义路线。

关于c# - MVC 中的参数未从路由正确传递到 View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34600283/

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