Так устроена удаленная проверка. Он отправляет AJAX-запрос к действию контроллера, чтобы выполнить некоторые проверки, и, если эти проверки не пройдены, запретить отправку.
Вы правы, считая, что вы должны выполнить ту же проверку после отправки формы, поскольку пользователь может отключить JavaScript и иметь возможность отправки без проверки клиента. Так, например, вы можете перенести эту логику проверки в отдельный метод, который вы вызываете из действия контроллера, используемого для удаленной проверки, и из действия POST после отправки формы.
Вот важные части моего кода:
MODEL
[Remote("CheckEsistenzaTicket", "Validation")]
public string TicketHD { get; set; }
КОНТРОЛЛЕР ВАЛИДАЦИИ
[OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
public class ValidationController : Controller
{
private ITManagerRepository tmanagerRepository;
public ValidationController()
{
this.tmanagerRepository = new TManagerRepository(new TManagerContext());
}
public JsonResult CheckEsistenzaTicket(string TicketHD)
{
if (!tmanagerRepository.chkTicketExists(TicketHD))
return Json(true, JsonRequestBehavior.AllowGet);
string esiste = String.Format(CultureInfo.InvariantCulture,
"Il ticket {0} risulta già caricato!", TicketHD);
return Json(esiste, JsonRequestBehavior.AllowGet);
}
}
VIEW
<div class="editor-field">
@Html.EditorFor(model => model.TicketHD)
@Html.ValidationMessageFor(model => model.TicketHD)
</div>