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 执行正确的路由,并且控制器中的操作结果对我而言是正确的。如果我做了一些严重错误的事情,或者您需要更多信息,请告诉我,谢谢。

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

我尝试使用

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

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