我自学MVC并且遇到正确路由的问题
我有一个名为" ClipsController"和1在里面查看名称"索引" (无聊,我知道)
我的routeconfig文件配置了以下路由:
routes.MapRoute(
"Clips",
"Clips/{id}",
new { controller = "Clips", action = "Index", id = urlparameters.Optional }
);
之前"默认"路线。当我去/ Clips / ExampleID 它确实达到了正确的路线,并在剪辑控制器中启动了索引操作。我遇到问题的是参数' ID'无法传递到索引页面,但我最终得到了剪辑控制器的索引操作,其中包含URL domain.my/Clips/ExampleID
我尝试使用
获取ID参数httpcontext.current.request.querystring["id"]
总是返回null。我在控制器中的动作结果如下:
public ActionResult Index(string id)
{
return view()
}
重申一下,我无法在索引视图中看到查询字符串id,即使URL执行正确的路由,控制器中的actionresult也是我的知识正确。如果我做了一些严重错误或需要更多信息,请告诉我,谢谢。
答案 0 :(得分:4)
我尝试使用
获取ID参数httpcontext.current.request.querystring [" ID"]
不,您在此网址中没有任何查询字符串参数:
http://domain.my/Clips/ExampleID
查询字符串参数遵循网址中的?
字符。例如,如果您有以下网址:
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"]
长话短说,如果您需要在控制器操作中查询此参数的值,您只需使用提供的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 }
);
所以感觉不仅仅是自由摆脱你的自定义路线。