MVC 中的参数未从路由正确传递到视图中
本文关键字:视图 路由 参数 MVC | 更新日期: 2023-09-27 18:29:06
我正在自学MVC,但正确路由有问题
我有一个名为"ClipsController"的控制器,里面有 1 个名为"索引"的视图(很无聊,我知道(
我用以下路由配置了我的路由配置文件:
routes.MapRoute(
"Clips",
"Clips/{id}",
new { controller = "Clips", action = "Index", id = urlparameters.Optional }
);
这是在"默认"路由之前。当我转到/剪辑/示例ID它确实命中了正确的路线,并在 Clips 控制器中启动了索引操作。我遇到的问题是参数"ID"无法传递到索引页面,但我最终进入了 Clips 控制器的索引操作,网址 domain.my/Clips/ExampleID
我尝试使用
httpcontext.current.request.querystring["id"]
始终返回 null。我在控制器中的操作结果如下:
public ActionResult Index(string id)
{
return view()
}
重申一下,我无法在索引视图上看到查询字符串 id,即使 URL 执行正确的路由,并且控制器中的操作结果对我而言是正确的。如果我做了一些严重错误的事情,或者您需要更多信息,请告诉我,谢谢。
我尝试使用
httpcontext.current.request.querystring["id"]
否,此 URL 中没有任何查询字符串参数:
http://domain.my/Clips/ExampleID
查询字符串参数跟在 url 中的?
字符后面。例如,如果您有以下网址:
http://domain.my/Clips?id=ExampleID
然后,您可以尝试使用初始代码读取id
查询字符串参数。
使用此 url: http://domain.my/Clips/ExampleID
可以查询id
路由值参数。但是使用HttpContext.Current
绝对是错误的方法。切勿在 ASP.NET MVC 应用程序中使用 HttpContext.Current
。恰恰相反,您可以在可以访问HttpContextBase
的任何位置访问此信息(这在 ASP.NET MVC 应用程序管道中几乎无处不在(:
httpContext.Request.RequestContext.RouteData.Values["id"]
长话短说,如果您需要在控制器操作中查询此参数的值,您只需使用提供的 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 }
);
因此,请随意摆脱您的自定义路线。