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> <span data-bind="text: userName"></span> <br/>
<span>Password</span> <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")';
}
}
});