我在jQuery / .NET MVC中有一段代码看起来像这样:
$('form').submit(function (event) {
event.preventDefault();
event.stopPropagation(); // only neccessary if something above is listening to the (default-)event too
if ($(this).valid()) {
$('#confirmLoader').show();
$('.btnregister').hide();
var formdata = new FormData($(this).get(0));
$.ajax({
url: this.action,
type: this.method,
data: formdata,
processData: false,
contentType: false,
success: function (result) {
if (result.statusCode == 700) {
// var loginWrapper = result.View.find(".loginWrapper").innerHTML;
// var sas = $($.parseHTML(result.View)).find(".loginWrapper").prevObject[45].innerHTML;
// $($.parseHTML(result.View)).find(".loginbody").html()
//
//console.log($($.parseHTML(result.View)).find(".loginbody").html());
$(".loginbody").html($($.parseHTML(result.View)).find(".loginbody").html());
//$("body").html(result.View);
//
// console.log(result.View);
return false;
}
else if (result.statusCode == 200) {
window.location.href = result.url;
}
}
});
}
return false;
});
因此,此方法的基本目的是发布数据并将用户登录到系统上。
如果服务器响应时出现错误代码700 =>,我将在.net MVC操作中呈现整个页面,并将其作为结果返回给用户并应显示;
因此,例如,如果我输入了xy邮件和错误的密码,则第一次显示该消息,但是第二次显示整个页面,甚至没有执行JavaScript代码。
我必须注意两件事:
$("body").html(result.View);
像这样,当状态码为700时,响应始终有效,并且始终正确显示消息。
但是,我不想替换用户的整个DOM,仅替换登录表单所在的部分,并显示错误消息。
这就是为什么我尝试这样做:
$(".loginbody").html($($.parseHTML(result.View)).find(".loginbody").html());
使用此解决方案只能在第一次使用...第二次将整个页面呈现给我,我可以看到页面正在刷新...
为什么在解决方案2中会发生这种情况?
P.S。这是在后台返回的代码:
ModelState.AddModelError("WrongUsernamePassword", "Wrong username or password!");
return Json(new { statusCode = 700, View = this.RenderView("Login", model) });
为什么第二种方法不起作用?
有人可以帮我吗?