2015-01-22 4 views
0

В моем проекте у меня есть два контроллера для обслуживания автобусов, маршруты автобусов и остановки автобуса. Чтобы получить доступ к остановкам маршрута, вам нужно выбрать маршрут шины, если маршрут не выбран, мне нужно перенаправить обратно на индекс маршрута шины. Я сделал оператор If else, чтобы проверить строку запроса и файл cookie, содержащий информацию.
Когда я иду прямо к контроллеру остановки маршрута автобуса, он должен отбросить меня обратно в список маршрутов автобусов, но это не так.Перенаправление, когда пустая строка пуста

public ActionResult Index() 
     { 

      string busRouteCode = ""; 
      //checks query string to see if empty 
      if (Request.QueryString == null) 
      { 
       //checks the cookies to see if empty 
       if (Request.Cookies["busRouteCode"] == null) 
        { 
        //if empty returns to bus route controller. 
        return View("index", "snBusRoutes"); 
        } 
       else 
        { 
         busRouteCode = Response.Cookies["busRouteCode"].Value;  
        }        
      } 
      else 
      { 
       busRouteCode = Request.QueryString["busRouteCode"]; 
      } 


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

если (string.IsNullOrEmpty (Request.QueryString)) – dbugger

+0

я могу сделать для печенья, а? –

+0

значение cookie, да, потому что это строка. Сам файл cookie, нет. – dbugger

ответ

1

Я не думаю, что Request.QueryStringво всей своей полноте никогда не собирается быть нулевой. Хотя значение может быть пустым или пустым. Что-то вроде этого:

if (string.IsNullOrWhiteSpace(Request.QueryString["busRouteCode"])) 
    if (string.IsNullOrWhiteSpace(Request.Cookies["busRouteCode"])) 
     return View("index", "snBusRoutes"); 

Update: Семантически это, вероятно, лучше, чтобы выполнить переадресацию, чем вернуть вид в этом случае. Пользователь делает конкретный запрос, но этот запрос направляет их куда-то еще. Они должны знать, что они идут куда-то еще. Что-то вроде этого:

if (string.IsNullOrWhiteSpace(Request.QueryString["busRouteCode"])) 
    if (string.IsNullOrWhiteSpace(Request.Cookies["busRouteCode"])) 
     return RedirectToAction("index", "controllerName"); 
+0

Im crashing now, когда я нажимаю на ссылку, чтобы перейти к этому контроллеру. Он приходит с «Элемент модели, переданный в словарь, имеет тип« System.String », но для этого словаря требуется элемент модели типа« System.Collections.Generic.IEnumerable'1 [snBusStop.Models.routeStop] ». " –

+0

@SteveN: Может быть, ваш вызов' View (string, string) 'не работает? Я не изменил это, просто скопировал то, что у вас было. Ошибка звучит так, будто этот вид ожидает коллекцию, и вы не предоставляете ее. Семантически, вероятно, лучше использовать перенаправление, а не возвращать представление в любом случае, я обновлю ответ ... – David

+0

Спасибо, что работает RedirectToAction. Очень признателен. –

Смежные вопросы