2010-02-08 45 views
24

Tôi đã thử sử dụng RedirectToAction sau khi tôi đã thực hiện một bài đăng cho bộ điều khiển và đã lưu nhưng URL không thay đổi và chuyển hướng dường như không hoạt động. Tôi cần phải thêm rằng chuyển hướng không nhập phương thức hành động điều khiển khi tôi gỡ lỗi. Nó không thay đổi URL hoặc điều hướng đến chế độ xem Index ...RedirectToAction không hoạt động

public ViewResult Index() 
    { 
     return View("Index",new TrainingViewModel()); 
    } 

public ActionResult Edit() 
{ 
    //save the details and return to list 
    return RedirectToAction("Index"); 

} 

Tôi đang làm gì sai?

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.IgnoreRoute("{resource}.js/{*pathInfo}"); 

      routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 

      routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
       ); 
     } 

// jQuery CUỘC GỌI

this.SynchValuesToReadOnly = function() { 
     window.location = $('#siteRoot').attr('href') + 'Sites/'; 

    }; 

    this.OnSiteEdit = function() { 

     //post back to the server and update the assessment details  
     var options = { 
      target: '', 
      type: 'post', 
      url: '/Site/Edit', 
      beforeSubmit: othis.validate, 
      success: othis.SynchValuesToReadOnly 
     }; 

     $('#uxSiteForm').ajaxSubmit(options); 
       }; 
+7

Mã bạn hiển thị là chính xác. Dự đoán hoang dã của tôi là bạn không thực hiện POST chuẩn (ví dụ: chuyển hướng không hoạt động với bài đăng AJAX). Bạn có thể hiển thị thêm mã không? –

+0

aaaaahhh .... không biết điều đó. Có bạn là đúng.Nó thực sự đến từ một bài đăng ajax trong jquery và điều đó có nghĩa là tôi nên chuyển hướng từ đó nếu thành công. Không vấn đề gì. Đặt bình luận của bạn lên như một 'câu trả lời' và tôi sẽ đánh dấu khi tôi chứng minh nó hoạt động nếu bạn thích cảm ơn – kurasa

Trả lời

65

Mã bạn hiển thị là chính xác. Dự đoán hoang dã của tôi là bạn không thực hiện POST chuẩn (ví dụ: chuyển hướng không hoạt động với bài đăng AJAX).

Trình duyệt sẽ bỏ qua phản hồi chuyển hướng tới một bài đăng AJAX. Đó là vào bạn để chuyển hướng trong kịch bản nếu bạn cần phải chuyển hướng khi một cuộc gọi AJAX trả về một phản ứng chuyển hướng.

+0

Câu trả lời hay. Bạn có thể giải thích lý do tại sao cho chúng tôi? –

+2

Khi bạn thực hiện "POST" không đồng bộ, bạn phải chuyển hướng thủ công (trong JS) nếu bạn nhận được phản hồi chuyển hướng. Trình duyệt không tự động làm điều đó. Đó là tất cả để nói về điều này. Trình duyệt giả định tập lệnh phụ trách trong trường hợp này. –

+2

chỉ bổ sung và đưa ra một số hướng dẫn cho n00bs như tôi. Trong hướng dẫn ajax.beginform, bao gồm một cái gì đó như thế này AjaxOptions mới {OnSuccess = "window.location.href = 'ControllerName/Action'"} và voilá –

3

Kiểm tra với con đom đóm. Bài đăng có thể đang trả về lỗi máy chủ.

7

Bạn cần thêm "return false;" để kết thúc sự kiện javascript onclick của bạn. Ví dụ:

Razor Mã

@using (Html.BeginForm()) 
{ 
    @Html.HiddenFor(model => model.ID) 
    @Html.ActionLink("Save", "SaveAction", "MainController", null, new { @class = "saveButton", onclick = "return false;" }) 
} 

JQuery Mã

$(document).ready(function() { 
     $('.saveButton').click(function() { 
      $(this).closest('form')[0].submit(); 
     }); 
    }); 

C#

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult SaveAction(SaveViewModel model) 
{ 
    return RedirectToAction("Index"); 
} 
+4

Vì lý do nào đó, tôi luôn quên rằng "trả lại" là bắt buộc. Đoán tôi là như vậy được sử dụng để Response.Redirect cũ mà không bao giờ yêu cầu một "trở lại". –

1

Hãy thử như sau:

trở lại trong hành động của bạn:

0.123.

return Json(Url.Action("Index", "Home"));

và trong ajax của bạn:

window.location.href

4

Tôi chỉ tình cờ gặp vấn đề này và không có gì đang làm việc cho tôi. Nó bật ra bộ điều khiển tôi đã chuyển hướng đến Ủy quyền cần thiết - thuộc tính [Authorize] đang ngăn chặn bất kỳ chuyển hướng nào.

[Authorize]//comment this out 
public class HomeController : Controller {...} 

Xuống đường hoặc trong các dự án lớn hơn có thể không cần sửa chữa, nhưng nếu bạn chỉ tìm kiếm một chuyển hướng đơn giản hoặc bắt đầu, đây có thể là giải pháp cho bạn.

2

Đây là một chút muộn .... nhưng tôi đã có cùng một vấn đề trong MVC5. Tôi đã có 2 hành động với cùng một tên, đó là đủ phổ biến. Tôi đã không nhận được bất kỳ lỗi nào mà tôi có thể nắm bắt trong Application_Error hoặc OnException trong bộ điều khiển. Tôi đã thử thêm vào hành động, bộ điều khiển, khu vực trong biến tuyến đường RedirectToAction để không có kết quả. Tôi đã kết thúc đổi tên hành động POST thành EditPost và mọi thứ hoạt động ngay bây giờ cho tôi. Hi vọng điêu nay co ich.

public ActionResult Edit(int id) 
{ 
    return View(); 
} 

[HttpPost, ValidateAntiForgeryToken] 
public ActionResult Edit(MyInputModel myInputModel) 
{ 
    return View(); 
} 

public ActionResult Create() 
{ 
    return RedirectToAction("Edit", new {id = 1}); 
} 
Các vấn đề liên quan