【发布时间】:2012-02-29 19:20:30
【问题描述】:
我在 Asp.net mvc 3 剃须刀上遇到部分页面更新问题,我无法通过
我有这个 _LogOn 部分视图,它有 2 个文本框电子邮件和密码以及一个用于登录目的的按钮连接:
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Password)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
</div>
<p>
<input id="submitConnexion" type="submit" value="Connexion" />
<a id="lnForgetPwd"> Mot de passe oublié</a>
</p>
}
这里是控制器:GET 控制器只不过是抓取 _Logon partialV 视图并将其交给 jquery 以更新名为 Div-2 的 div。
// GET: Account/Logon
public ActionResult LogOn()
{
return PartialView("_LogOn");
}
POST 控制器应该检查密码是否正确,如果登录/密码正确则返回 Json 值 true,否则刷新 Div-2 并显示错误。
// POST: Account/Logon
[HttpPost]
public ActionResult LogOn(UserLogon model)
{
bool result = false;
if (ModelState.IsValid)
{
UserManager userManager = new UserManager();
string password = userManager.GetUserPassword(model.Email);
if (string.IsNullOrEmpty(password))
{
ModelState.AddModelError("", "Mot de passe ou email incorrect.");
result = false;
}
if (model.Password == password)
{
FormsAuthentication.SetAuthCookie(model.Email, false);
result = true;
}
}
//return Json(new { JsResult = result });
return PartialView("_Logon", model);
}
最后是 Ajax Jquery 代码
// Ajax call POST for login form button submitConnexion
$("#submitConnexion").live('click', function () {
var email = $("#div-2 #Email").val();
var password = $("#div-2 #Password").val();
var data = { Email: "hello", Password: password };
alert(email + password);
$.ajax({
url: "/Account/LogOn",
type: "POST",
//data: JSON.stringify(data),
//contentType: 'application/json; charset=utf-8',
success: function (result) {
alert("Hello");
$("#div-2").empty();
$("#div-2").html(result).hide().fadeIn(300);
}
});
});
// Ajax call POST for login form button
它不工作 2 个问题
- 每次我单击“Connexion”按钮时,都会触发 post 控制器(我假设是从 _Logon 部分视图的 @html.Beginform 触发)而不是从 Ajax Jquery 触发
因此,partialView 显示在新的 Internet 页面上,而不是显示在 Div-2 中
- 我想在登录/密码检查失败的情况下更新 Div-2 并返回部分视图,但是如果登录/密码正常,我如何告诉操作控制器向我发送 Json 中的 ajax Jquery 结果而不是局部视图?
谢谢
【问题讨论】:
标签: jquery ajax asp.net-mvc asp.net-mvc-3 razor