我正在尝试使用新的RemoteAttribute实现远程验证,如以下MSDN文章How to: Implement Remote Validation in ASP.NET MVC中所述。
客户端验证工作正常,但是当我提交时,验证不再有效,数据存储到db ...
我也必须实施服务器端验证,或者我没有采取一切必要措施来阻止提交?
答案 0 :(得分:2)
这就是远程验证的设计方式。它向控制器操作发送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);
}
}
查看强>
<div class="editor-field">
@Html.EditorFor(model => model.TicketHD)
@Html.ValidationMessageFor(model => model.TicketHD)
</div>