服务端服务器验证失败,为什么验证不会在客户端失败但在服务器端失败?

作者探讨了一个ASP.NET MVC应用中,为何前端表单验证显示用户名已被占用,但实际Ajax请求成功的问题。通过分析,发现服务器端验证正确,关键在于如何正确解析和处理AJAX响应中的错误信息。解决方案包括在success回调中检查服务器返回的`Success`属性而非直接认为请求成功。
摘要由CSDN通过智能技术生成

现在,我有一个包含多个字段的表单,提交后,我想检查用户名是否被使用.如果采取,则什么都不做(显示验证错误),如果没有采取,则成功进行下一个表格.

到目前为止,这是我所做的:

视图:

var RequestCreateAccount_Submit = function () {

var res = false;

ValidationAttribute.BlankValue(true);

var form = $('form#RequestCreateAccount');

$.validator.unobtrusive.parse(form);

var res = form.valid();

var data = form.serialize();

if (res) {

$.ajax({

url: Url.getFullUrl('Account/RequestCreateAccount_Submit'),

type: 'Post',

data: data,

cache:false,

success: function (data) {

//Next Dialog

},

error: AjaxLog.HandleAjaxCallFail

});

}

return res;

}

控制器:

[AllowAnonymous]

[HttpPost]

public ActionResult RequestCreateAccount_Submit(UserAccount userAccount)

{

//Check if username is unique

if (!WebSecurity.UserExists(userAccount.UserName))

{

UserSession.AddValue(StateName.CreateOrEditAccount, "CurrentUserAccount", userAccount);

JsonResult res = Json(new { Success = true, data = "", Message = "" });

return res;

}

JsonResult jres = Json(new { Success = false, data = "", Message = "Username is already registered"});

return jres;

}

我用一个已知的用户名对其进行了测试,它确实击中了success = false(在if语句之外)行,并且没有进入if语句内.因此,我知道服务器端的验证有效.

但是,我想知道为什么在客户端仍然成功= true并显示下一个对话框.验证没有失败.我在客户端做错了什么?

解决方法:

原因是您的控制器确实确实成功返回了结果.只是成功的结果指示错误.尽管这在逻辑上是相似的,但它们是非常不同的.将为抛出的实际异常或404无路由存在类型的方案保留错误.

您应该在成功回调函数中检查响应状态

$.ajax({

url: Url.getFullUrl('Account/RequestCreateAccount_Submit'),

type: 'Post',

data: data,

cache:false,

success: function (data) {

if(data.Success === false){

AjaxLog.HandleAjaxCallFail();

// this may not make as much sense though

// as the request didn't actually fail, just the action did

//TODO: code for name fail

return;//do not process next dialog

}

//Next Dialog

},

error: AjaxLog.HandleAjaxCallFail

});

标签:asp-net-mvc-4,javascript,c,asp-net-mvc,jquery

来源: https://codeday.me/bug/20191120/2041387.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值