ASP.NET MVC3:为什么使用RemoteAttribute进行远程验证仅适用于客户端?

时间:2012-01-12 06:51:18

标签: asp.net-mvc-3 validation

我正在尝试使用新的RemoteAttribute实现远程验证,如以下MSDN文章How to: Implement Remote Validation in ASP.NET MVC中所述。

客户端验证工作正常,但是当我提交时,验证不再有效,数据存储到db ...

我也必须实施服务器端验证,或者我没有采取一切必要措施来阻止提交?

1 个答案:

答案 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>