我正在尝试使用新的RemoteAttribute实现远程验证,如MSDN文章《如何在ASP.NET MVC中实现远程验证》中所述。
客户端验证工作正常,但当我提交时,验证不再工作,数据存储在数据库中。。。
我也必须实现服务器端验证,或者我没有做所有必要的事情来阻止提交?
远程验证就是这样设计的。它向控制器操作发送AJAX请求,以便执行一些验证,如果这些验证失败,则阻止提交。
您认为表单提交后应该执行相同的验证是正确的,因为用户可以禁用javascript,并且可以在不执行任何客户端验证的情况下提交。因此,例如,您可以将此验证逻辑外部化为一个单独的方法,您将从用于远程验证的控制器操作和表单提交后的POST操作中调用该方法。
以下是我代码的重要部分:
型号
[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);
}
}
查看
<div class="editor-field">
@Html.EditorFor(model => model.TicketHD)
@Html.ValidationMessageFor(model => model.TicketHD)
</div>