2013-01-04 54 views
0

使用jQuery ajax進行一些CRUD操作的MVC 3應用程序。使用HttpPost無法工作的MVC3 jQuery表單提交和RedirectToAction

我發佈我的用戶詳細信息表單到控制器方法來保存信息。 一旦信息得到保存,我重定向到詳細信息頁面通過將保存的ID和一些TempData的信息顯示,如「用戶保存的全成」

但它不是在控制器要詳細方法,SaveUserDetail方法後,一些消息。

這裏是我的控制器代碼

[HttpPost, Authorize] 
    public ActionResult UserDetail(string Id) 
    { 
    User user = AdminService.SelectUserByUserName(Id); 
    UserDetailViewModel viewModel = Mapper.Map<User, UserDetailViewModel>(user); 
     if (TempData["SaveStatus"] != null && TempData["SaveStatus"] == "true") 
     { 
      viewModel.InSaveMode = true; 
      viewModel.SaveStatus = true; 
     } 
     return View(viewModel); 
    } 

    [HttpPost, Authorize, ValidateAntiForgeryToken] 
    public ActionResult SaveUserDetail(UserDetailViewModel viewModel) 
    { 
     User userToSave = new User(); 
     AdminService.UpdateUser(userToSave); 
     TempData["SaveStatus"] = "true"; 
     return RedirectToAction("UserDetail", new { Id = viewModel.userId}); 
    } 

我的jQuery代碼

$("#user-detail-form").submit(function (e) { 
     if ($(this).valid()) { 
      $.post('@Url.Action("SaveUserDetail")', 
         $(this).serialize(), function (data) { 
       $("#user-detail-box").html(data); 
       $.validator.unobtrusive.parse($("#user-detail-box")); 
      }); 
     } 
     e.preventDefault(); 
    }); 

回答

2

從你UserDetail方法擺脫[HttpPost]屬性的,如果你打算重定向到它。

如果控制器操作使用[HttpPost]屬性進行修飾,這意味着此操作只能通過POST HTTP動詞訪問。但在你的情況下,你正在重定向到它(return RedirectToAction("UserDetail", new { Id = viewModel.userId});),並且你知道HTTP中的重定向意味着302狀態碼與Location標頭,然後是客戶端到目標位置的GET請求。

如果您在瀏覽器中使用FireBug或類似的JavaScript調試工具來分析AJAX請求,您將立即看到這一點。

+0

非常感謝。這是成功。但爲了顯示成功消息,我使用TempData並參考。可以嗎?或任何其他推薦的方式? –

+0

我將傳遞成功消息作爲查詢字符串參數而不是使用TempData。 –

+0

我也做了同樣的事情,並享受開發MVC3應用程序的更好方式。非常感謝您的指導。一直跟着你!帽子! –