Asp.net mvc Knockoutjs无法转到RedirectToAction视图

Asp.net mvc Knockoutjs无法转到RedirectToAction视图,asp.net-mvc,knockout.js,Asp.net Mvc,Knockout.js,我有一个简单的登录控制器: public ActionResult Login() { return View(); } [HttpPost] public ActionResult Login(string userName, string passWord) { if (ModelState.IsValid) { var employee = db.Employees.FirstOrDefault(x => x.Employee

我有一个简单的登录控制器:

public ActionResult Login()
{
    return View();
}

[HttpPost]
public ActionResult Login(string userName, string passWord)
{
    if (ModelState.IsValid)
    {
        var employee =
        db.Employees.FirstOrDefault(x => x.EmployeeNo == userName && x.Password == passWord && x.StatId == 1);

        if (employee != null)
        {
            return RedirectToAction("Index");
        }

    }   

    return View();
}


public ActionResult Index()
{
    return View(db.Employees.ToList());
}
这是绑定到knockoutjs文件的我的视图:

@model SimpleLogin.Models.Employee

@{
    ViewBag.Title = "Login";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Login</h2>

<span>User</span> &nbsp; <span data-bind="text: userName"></span> <br/>
<span>Password</span> &nbsp; <span data-bind="text: passWord"></span>
<div>
    <table>
        <tr>
            <td>
                <input type="text" name="txtUserName" placeholder="User Name" data-bind="value: userName" /></td>
        </tr>
        <tr>
            <td>
                <input type="password" name="txtPassword" placeholder="Password" data-bind="value: passWord"/></td>
        </tr>
    </table>

    <button data-bind="click: logUser">Login</button>
</div>


@section Scripts
     {
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/knockout")
    @Scripts.Render("~/Knocks/LoginVm.js")
}
运行应用程序时,我在控制器的if ModelState.IsValid中放置了一个断点。它工作得很好。它甚至执行了return-RedirectToActionIndex,但问题是,页面停留在登录视图中,从未加载索引视图。为什么?我做错了什么

我还说:

bundles.Add(new ScriptBundle("~/bundles/knockout").Include(
                        "~/Scripts/knockout-2.1.0.js",
                        "~/Scripts/knockout-2.1.0.debug.js"));
在BundleConfig.cs中

我不习惯js,这让我很困惑。我知道我所做的有两个以上的错误

这是我的课

public class Employee{
public int EmployeeId {get; set;}
public string UserName {get; set}
public string Password {get; set;}
}
您不能将视图返回到ajax请求。您应该将其更改为:

public ActionResult Login(string userName, string passWord)
{
    if (ModelState.IsValid)
    {
        var employee =
        db.Employees.FirstOrDefault(x => x.EmployeeNo == userName && x.Password == passWord && x.StatId == 1);

        if (employee != null)
        {
            return Json(true);
        }
    }   

    return Json(false);
}
然后在js中:

    $.ajax({
        url: '/Company/Login',
        type: 'post',
        dataType: 'json',
        data: ko.toJSON(self),
        contentType: 'application/json',
        success: function(data) {
           if(data) {
              window.location.href = '@Url.Action("Index", "Company")';
           }
        }
    });

但这里没有必要使用击倒。您只需在控制器中返回RedirectToActionIndex和Company,即可完成常规表单提交和重定向。

您正在进行ajax调用-它们的全部目的是保持在同一页面上ajax调用从不重定向哇!我不知道!谢谢,我明白了!但接下来的一个问题是,如何保存已登录到var employee=db.Employees.FirstOrDefault中检索到的对象knockout@NoobProgger如果要在控制器中设置和访问用户数据,可以使用会话。如果您想在javascript中访问它,可以使用。
    $.ajax({
        url: '/Company/Login',
        type: 'post',
        dataType: 'json',
        data: ko.toJSON(self),
        contentType: 'application/json',
        success: function(data) {
           if(data) {
              window.location.href = '@Url.Action("Index", "Company")';
           }
        }
    });