Я пытаюсь реализовать удаленную проверку с использованием ненавязчивого JavaScript ASP.NET MVC3.
Кажется, что это работает, но я могу отправить свою форму, даже если она не должна быть действительной.
Похоже, проверка не происходит достаточно быстро.Я использую сервер разработки ASP.NET с отладчиком VS 2010, и метод удаленной проверки не всегда срабатывает.Когда я немного подожду, проверка произойдет, и я не смогу отправить форму.
Я начинаю думать, что удаленная проверка на стороне клиента недостаточно надежна, и мне, возможно, следует подумать об использовании проверки на стороне сервера просто для того, чтобыубедитесь, что применяются правильные проверки.
Есть ли способ исправить это?
РЕДАКТИРОВАТЬ:
Как вы и просили, вот частьмой код относительно проблемы.Я начну с вашего совета и использую проверку на стороне сервера, чтобы пользователи не могли обойти мои проверки.
Модель:
[Required(ErrorMessage = "*"), StringLength(50)]
[Remote("EventCategoryNameExists", "EventCategories",
AdditionalFields = "EventCategoryId",
ErrorMessageResourceType = typeof(Messages),
ErrorMessageResourceName = "EventCategoryNameAlreadyExists")]
[LocalizedDisplayName("Name")]
public string Name { get; set; }
Просмотр:
<div id="formMain">
@Html.HiddenFor(x => x.EventCategoryId)
<fieldset class="formFieldset">
<legend>@Labels.EventCategoryDetails</legend>
<div class="formFieldsetContent">
<table id="formTable" class="formTable">
<tr>
<td class="formLabelCell" style="width: 90px;">
@Html.LabelFor(x => x.Name) :
</td>
<td class="formInputCell">
@Html.EditorFor(x => x.Name)
@Html.ValidationMessageFor(x => x.Name)
</td>
</tr>
<tr>
<td class="formLabelCell" style="vertical-align: top;">
@Html.LabelFor(x => x.Color) :
</td>
<td class="formInputCell">
@Html.EditorFor(x => x.Color)
@Html.ValidationMessageFor(x => x.Color)
</td>
</tr>
</table>
</div>
</fieldset>
</div>
<div class="formButtons">
<input type="submit" id="btnSave" value="@Labels.Save" class="formButton" />
<input type="button" id="btnCancel" value="@Labels.Cancel" class="formButton" />
</div>
Контроллер:
public ActionResult EventCategoryNameExists(int eventCategoryId, string name)
{
return Json(!_eventService.EventCategoryNameExists(eventCategoryId, name), JsonRequestBehavior.AllowGet);
}