繁体   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