2010-05-14 29 views
6

Tôi có một Phương thức hành động mà tôi muốn trả lại JSON từ một điều kiện hoặc chuyển hướng trên một điều kiện khác. Tôi nghĩ rằng tôi có thể làm điều này bằng cách trả lại ActionResult từ phương pháp của tôi nhưng làm điều này gây ra lỗi "không phải tất cả các đường dẫn mã trả về một giá trị"Làm cách nào để trả về JSON hoặc RedirectToAction?

Bất cứ ai có thể cho tôi biết tôi đang làm gì sai? Hoặc làm thế nào để đạt được kết quả mong muốn?

Dưới đây là đoạn code dưới đây:

[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: để làm rõ, tôi đã cố gắng để return RedirectToAction("Index", "Group"); như đề xuất trong các câu trả lời nhưng nó không làm gì cả. Điểm ngắt trong hành động mà tôi đang chuyển hướng để không bị truy cập.

Trả lời

3

Bạn cần thay đổi

RedirectToAction("Index", "Group"); 

để

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

Kindness,

Dan

+0

Hi Daniel, tôi đã cố gắng này, nhưng nó dường như không làm gì cả. Tôi đặt một breakpoint vào hành động tôi đang chuyển hướng đến nhưng điều đó không bị ảnh hưởng. Tôi đã cập nhật câu hỏi với điều này. Cảm ơn – DaveDev

+1

Đây có phải là phương thức hành động chỉ chấp nhận Bài đăng và bạn đang cố gắng chuyển hướng đến một hành động chỉ chấp nhận Nhận? Tôi đã bị vấp ngã trước đó rồi. Kindness, Dan –

0

bạn shold trở RedirectResult. Thay đổi chuỗi này

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

để

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

và tất cả sẽ hoạt động tốt.

0

của bạn thiếu một tuyên bố trở lại:

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

Phương pháp Controller.RedirectToAction trả về một phương pháp RedirectToRouteResultController.Json trả về một JsonResult. Cả hai đều mở rộng ActionResult.

0

Tôi nghĩ lý do khiến chuyển hướng của bạn không nhận được nơi bạn muốn là nó hướng đến hành động chỉ chấp nhận Gets và bạn đang chuyển hướng bài đăng.

Kindness,

Dan

Các vấn đề liên quan