2010-05-14 3 views
6

У меня есть метод действий, который я хотел бы либо возвратить JSON из одного условия, либо перенаправить на другое условие. Я думал, что могу это сделать, возвращая ActionResult из моего метода, но это приводит к ошибке «не все пути кода возвращают значение»Как вернуть JSON или RedirectToAction?

Может ли кто-нибудь сказать мне, что я делаю неправильно? Или как достичь желаемого результата?

Вот код ниже:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Login(User user) 
    { 
     var myErrors = new Dictionary<string, string>(); 
     try 
      { 


       if (ModelState.IsValid) 
       { 
        if (userRepository.ValidUser(user)) 
        { 
         RedirectToAction("Index", "Group"); 
         //return Json("Valid"); 
        } 
        else 
        { 
         return Json("Invalid"); 
        } 

       } 
       else 
       { 
        foreach (KeyValuePair<string, ModelState> keyValuePair in ViewData.ModelState) 
        { 
         if (keyValuePair.Value.Errors.Count > 0) 
         { 
          List<string> errors = new List<string>(); 

          myErrors.Add(keyValuePair.Key, keyValuePair.Value.Errors[0].ErrorMessage); 
         } 

        } 
        return Json(myErrors); 
       } 
      } 
      catch (Exception) 
      { 
       return Json("Invalid"); 
      } 

     } 

Edit: уточнить, я уже пытался return RedirectToAction("Index", "Group");, как предложено в ответах, но ничего не делает. Точка останова в действии, к которому я перенаправляюсь, не попадает.

ответ

3

Вы должны изменить

RedirectToAction("Index", "Group"); 

в

return RedirectToAction("Index", "Group"); 

Доброты,

Dan

+0

Привет Даниэль, я попытался это, но это, кажется, не делать ничего. Я поставил точку останова в действие, к которому я перенаправляюсь, но это не попадает. Я обновил этот вопрос. Спасибо – DaveDev

+1

Это метод действия, который принимает только сообщение, и вы пытаетесь перенаправить действие, которое принимает только Get? Раньше я был спокоен. Доброта, Дэн –

0

вы shold вернуть RedirectResult. Измените эту строку

if (userRepository.ValidUser(user)) 
        { 
         RedirectToAction("Index", "Group"); 
         //return Json("Valid"); 
        } 

в

if (userRepository.ValidUser(user)) 
        { 
         return RedirectToAction("Index", "Group"); 
         //return Json("Valid"); 
        } 

и все будет работать нормально.

0

Ваш отсутствующий оператор возврата:

return RedirectToAction("Index", "Group"); 

Метод Controller.RedirectToAction возвращает метод RedirectToRouteResult и Controller.Json возвращает JsonResult. Оба варианта: ActionResult.

0

Я думаю, причина, по которой ваше перенаправление не получает, где вы хотите, это то, что оно направляет действие, которое принимает только Gets, и вы перенаправляете сообщение.

Kindness,

Dan

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