无法检索查询字符串数据

时间:2015-01-23 15:22:50

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

在我的公共汽车服务MVC项目中,我需要能够在我去路线表时显示公交路线停靠。我有这个ActionLink将查询字符串和页面发送到路由表:@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());
    }
        }    

2 个答案:

答案 0 :(得分:1)

此代码{id=item.busRouteCode}生成如下查询: http://snRouteStops/Index?id=somedata 其中somedata = item.busRouteCode。 尝试在查询字符串中查找id或只是将id添加到action params,如:

public ActionResult Index(string id)

答案 1 :(得分:1)

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

@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即将到来。

  2. //显示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. 更改您的操作链接以将busRouteCode作为名为busRouteCode的参数发送。
    2. @Html.ActionLink("Route Stops", "index", "snRouteStops", new { busRouteCode=item.busRouteCode}, null)

      这将生成如下所示的链接:

      /snRouteStops/Index?busRouteCode=myBusRouteCodeValue

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