无法检索查询字符串数据

Unable to retrieve querystring data

在我的巴士服务 MVC 项目中,我需要能够仅在我前往路线 table 时显示巴士路线停靠点。我有这个 ActionLink 将查询字符串和页面发送到路由 table: @Html.ActionLink("Route Stops", "index", "snRouteStops", new { id=item.busRouteCode}, null)
但是当我到达我的公共汽车路线停靠站控制器时,如果没有选择的话,我需要它让我回到路线列表。这部分工作正常,但是当我单击路线查看停靠点时,没有任何反应。这是我在 busRouteStops 控制器的 actionResult 中的代码:

public ActionResult Index()
        {
            string busRouteCode = "";

            if (string.IsNullOrWhiteSpace(Request.QueryString["busRouteCode"]))
            {
                if (Request.Cookies["busRouteCode"] == null)
                {
                    return RedirectToAction("index", "snBusRoutes");
                }
                else
                {
                    busRouteCode = Request.Cookies["busRouteCode"].ToString();                    
                }    
            }
            else
            {
                busRouteCode = Request.QueryString["busRouteCode"].ToString();            

            }
             var routeStops = db.routeStops.Include(r => r.busRoute).Where(r => r.busRouteCode == busRouteCode).Include(r => r.busStop);
        return View(routeStops.ToList());
    }
        }    

此代码 {id=item.busRouteCode} 生成如下查询: http://snRouteStops/Index?id=somedata 其中一些数据 = item.busRouteCode。 尝试在查询字符串中查找 id 或将 id 添加到操作参数中,例如:

public ActionResult Index(string id)

您的主要问题是您正在寻找名称为 busRouteCode 的查询字符串,但您的操作 link 未设置为提供具有该名称的查询字符串。你的行动 link -

@Html.ActionLink("Route Stops", "index", "snRouteStops", new { id=item.busRouteCode}, null)

被配置为将 busRouteCode 作为名称 id 的参数发送。这意味着 URL 将如下所示:

/snRouteStops/Index?id=myBusRouteCode

因此,没有名称为 busRouteCode

的查询字符串

你可以做一些事情来清理它。

  1. MVC 中的标准路由配置为使用 /Controller/Action/id。您可以通过更新操作方法来更新您的索引操作,以了解即将到来的 ID。

//根据你的代码显示id是一个字符串

public ActionResult Index(string id)
        {
            string busRouteCode = "";

            if(string.IsNullOrEmpty(id))
            {
                if (Request.Cookies["busRouteCode"] == null)
                {
                    return RedirectToAction("index", "snBusRoutes");
                }
                else
                {
                    busRouteCode = Request.Cookies["busRouteCode"].ToString();                    
                }    
            }
            else
            {
                busRouteCode = id;            

            }
             var routeStops = db.routeStops.Include(r => r.busRoute).Where(r => r.busRouteCode == busRouteCode).Include(r => r.busStop);
        return View(routeStops.ToList());
    }
        } 

  1. 更改您的操作 link 以将 busRouteCode 作为名为 busRouteCode 的参数发送。

@Html.ActionLink("Route Stops", "index", "snRouteStops", new { busRouteCode=item.busRouteCode}, null)

这将生成如下所示的 link:

/snRouteStops/Index?busRouteCode=myBusRouteCodeValue

无论您如何进行,您都不应该真的必须在 MVC 控制器操作中使用 Request.QueryString[]。通过将您的操作方法配置为查找那些查询字符串值(就像我在示例 1 中所做的那样),您现在可以在操作方法中获取强类型参数,而不是 QueryString[] 字典中的字符串值。例如,当期望整数作为查询字符串值时,这尤其有用。模型绑定器将负责确保查询字符串值实际上是一个整数而不是字符串。