我正在使用asp.net mvc 4开发一个网站,
我有一个检查用户是否注册的方法。我使用ajax,如果用户已经注册,我想在注册网页上的div上写一条消息,如果没有,我想注册用户并返回主页。我希望它清楚。因为它似乎有点难以理解。
script type="text/javascript">
$(function() {
$('#form0').submit(function(event) {
event.preventDefault();
var result = "";
var form = $(this);
$.ajax({
url: "CheckUser", //form.attr("action"),
data: form.serialize(),
beforeSend: function() {
$("#ajax-loader").show();
},
complete: function() {
$("#ajax-loader").hide();
},
error: function(request, status, error) {
var obj = jQuery.parseJSON(request.responseText);
if (request.status == 403) // authorize error
{
myRouting(obj.LogOnUrl, "403 error", "error");
} else {
alert("Error Occured: " + error.responseText + "\nError Code: " +
request.responseText + " -- " + request.responseText);
var msg = "Error: " + error + "\nErrorCode: " + request.status;
myRouting("", msg, "error");
}
},
success: function (data) {
$.each(data, function() {
result += this.Name + "\n";
});
myRouting("", data, "data");
}
});
return false;
});
$(function myRouting(site, message, type) {
if (type == "error") {
$('#searchFailed').remove();
$('<div id="searchFailed"></div>').appendTo('#searchMain');
$('#searchFailed').append("<p>" + message + "</p>");
}
});
});
</script>
@using (Html.BeginForm("CheckUser", "Account", FormMethod.Post, new { id = "form0" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<fieldset>
<legend>Registration Form</legend>
<ol>
<li>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
</li>
<li>
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
</li>
<li>
@Html.LabelFor(m =>m.Password)
@Html.PasswordFor(m => m.Password)
</li>
<li>
@Html.Label("Confirm Password")
@Html.PasswordFor(m => m.Password)
</li>
<li>
@Html.LabelFor(m => m.Email)
@Html.TextBoxFor(m => m.Email)
</li>
</ol>
<input type="submit" value="Register" />
</fieldset>
}
这是我的帐户控制器
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(User model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
var result = helper.RegisterUser(model);
if (result)
return RedirectToAction("Index", "Home"); //Json(Url.Action("Index", "Home"));
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
return View(model);
}
public ActionResult CheckUser(User model)
{
bool result = helper.IsUserExist(model);
if (result)
{
ModelState.AddModelError("", ErrorCodeToString(MembershipCreateStatus.DuplicateUserName));
return Content("User is already created !!!!");
}
return Register(model);
}
我知道在ajax中,它不可能重定向动作,但如果我能做到这一点&#34;错误&#34;在ajax中,我可以在ajax中重定向..
返回内容始终是&#34;成功&#34;在ajax中,即使用户之前没有注册过,它仍然是成功的&#34;
答案 0 :(得分:2)
不要将success
事件与代码的逻辑部分/授权成功混淆。
ajax成功意味着请求已经完成..您需要检查它返回的数据,看看它是否有您确定是否成功检查用户的信息。
在success
事件处理程序中,检查返回的数据。
如果我是你,我将不会返回一个视图..我可能会返回JSON,它可以清楚地显示任务成功或失败的信息......以及可能的错误描述。