MVC中的参数未正确地从路由传递到视图中

时间:2016-01-04 21:35:20

标签: c# asp.net-mvc asp.net-mvc-3 routes

我自学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也是我的知识正确。如果我做了一些严重错误或需要更多信息,请告诉我,谢谢。

1 个答案:

答案 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 }
);

所以感觉不仅仅是自由摆脱你的自定义路线。