簡體   English   中英

如何使用Knockout.js在MVC控制器之間移動?

[英]How to move between MVC controllers using knockout.js?

從一個MVC控制器轉移到另一個MVC控制器時遇到問題。 我是MVC /淘汰賽組合的新手,正在嘗試尋找最佳方法。

我有一個HomeController,它執行一些登錄過程。 控制器的“登錄”視圖包含將數據發布到其中的敲除腳本。 在選擇了某個選項后,通過按下帶有data-bind =“ clicked:SubmitLocation”的按鈕來執行此代碼。

    self.SubmitLocation = function () {
        var jsonData = ko.toJSON(new LoginModel(self.Username, self.Password, self.isAuthenticated, self.UserId, self.SelectedLocId, self.SelectedLocDesc));
        alert(jsonData);
        $.ajax({
            ur: '@Url.Action("Login", "Home")',
            type: 'post',
            data: jsonData,
            contentType: 'application/json',
            success: function () { }
        });

這將其帶入MVC控制器中的代碼:

    [HttpPost]
    public ActionResult ....{
            return RedirectToAction("Products", "Product");
     ...}

通過代碼調試,我看到它毫無例外地被傳遞到了Product控制器甚至是Products視圖。 但是,瀏覽器本身的頁面仍保留在原始的HomeController / Login視圖中。 我要去哪里錯了?

我也嘗試過從同一個HOmeController返回一個不同的視圖,而不是RedirectToAction,並且它仍然相同。

您不能return RedirectToAction()return View()給ajax調用。 成功登錄后,從控制器return Json(true)並在ajax的success回調中,重定向到Products操作

[HttpPost]
public ActionResult Login(UserViewModel user)
{
     // authentication code here

     return Json(true);
}

JS:

self.SubmitLocation = function() {
  var jsonData = ko.toJSON(new LoginModel(self.Username, self.Password, self.isAuthenticated, self.UserId, self.SelectedLocId, self.SelectedLocDesc));

  $.ajax({
    ur: '@Url.Action("Login", "Home")',
    type: 'post',
    data: jsonData,
    contentType: 'application/json',
    success: function(data) {
      if (data)
        location.href = '@Url.Action("Products", "Product")'; // redirect
    }
  });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM