Прямо сейчас у меня есть форма с несколькими полями, и при отправке я хочу проверить, занято ли имя пользователя или нет. Если принято, ничего не делать (показать ошибку проверки), если не принято, успешно перейти к следующей форме.
Вот что я сделал до сих пор:
Вид:
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. Итак, я знаю, что проверка на стороне сервера работает.
Тем не менее, мне интересно, почему на стороне клиента все еще success = true, и появился следующий диалог. Он не потерпел неудачу при проверке. Что я делаю не так на стороне клиента?
[Remote]
и не спасаете себя написанием всего этого (плохого) скрипта?$.validator.unobtrusive.parse(form);
бессмысленно. Назначениеvar data = form.serialize();
перед проверкой правильности формы - пустая трата времени. - person   schedule 26.06.2015return Json(true, JsonRequestBehavior.AllowGet);
в противном случаеreturn Json(false, JsonRequestBehavior.AllowGet);
для отображения сообщения об ошибке, определенного вRemoteAttribute
илиJson("some error message", JsonRequestBehavior.AllowGet);
, чтобы переопределить сообщение по умолчанию. См. Как: реализовать удаленную проверку в ASP.NET MVC < / а> - person   schedule 26.06.2015private bool IsUnique(string userName)
, который я вызываю из метода удаленных атрибутов (для проверки на стороне клиента) и снова в методе POST (для защиты от злонамеренного пользователя) - person   schedule 26.06.2015[Remote]
не позволит вам это сделать. Хотя в любом случае я не вижу необходимости делать это из вызова ajax - разве вам не нужно добавлять модель в сеанс в методе POST, если модель действительна? - person   schedule 26.06.2015