В момента имам формуляр с няколко полета и при изпращане искам да проверя дали потребителското име е заето или не. Ако е взето, не правете нищо (покажете грешка при валидиране), ако не е взето, успешно продължете към следващия формуляр.
Ето какво съм направил досега:
Преглед:
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. Така че знам, че валидирането от страна на сървъра работи.
Чудя се обаче защо от страна на клиента все още е успех = вярно и се появява следващият диалогов прозорец. Не се провали при валидирането. Какво правя грешно от страна на клиента?
[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Ако използвате Visual Studio Code, заменете
с
Появява се, когато включването на вътрешния дебъгер деактивира дебъгера на VS Code.
- person Kala J   schedule 26.06.2015