ASP.NET MVC View中获取id参数时Context.Request.Query返回null求助
解决ASP.NET Core中路由参数无法通过Query获取的问题
嘿,我明白你遇到的问题了——你通过路由传递了id参数,但无论是在控制器里用HttpContext.Request.Query["id"],还是在View里尝试获取,都返回null。这其实是个很常见的误区,咱们一步步来解决:
为什么Query["id"]会返回null?
首先得搞清楚:你的请求地址localhost:1000/MyController/Getuser/65190907-1145-7049-9baa-d68d44b1ad06里的id是路由参数,它匹配了你Startup中配置的{controller=Home}/{action=Index}/{id?}模板,属于URL路径的一部分;而Query集合是用来获取URL末尾?key=value这种格式的查询字符串参数的,所以自然拿不到路由里的id。
几种解决方法
方法1:控制器把参数传递给View
最简单的方式就是在控制器里先拿到绑定好的id参数,再把它传递给View。你可以用ViewBag、ViewData或者强类型模型:
public ActionResult Getuser(Guid id) { // 用ViewBag传递参数 ViewBag.UserId = id; // 也可以用ViewData // ViewData["UserId"] = id; return View(); }
然后在View里直接使用:
<p>用户ID:@ViewBag.UserId</p>
方法2:在View中直接从路由数据获取
如果不想通过控制器传递,也可以在View里直接从路由集合中提取参数:
@{ Guid userId = Guid.Empty; // 先判断路由参数是否存在,再安全转换类型 if (Context.Request.RouteValues.TryGetValue("id", out var idValue) && Guid.TryParse(idValue?.ToString(), out userId)) { // 这里就可以使用userId变量了 } } <p>用户ID:@userId</p>
额外提示:如果想用Query获取该怎么做?
要是你非要用Query["id"]拿到值,那得把请求地址改成查询字符串格式:localhost:1000/MyController/Getuser?id=65190907-1145-7049-9baa-d68d44b1ad06,不过这就不符合你当前的路由配置逻辑了,不推荐这么改。
内容的提问来源于stack exchange,提问作者KevinBui
相关产品推荐
相关产品推荐

