2009-10-17 26 views
9

我想跟蹤爲什麼我的ASP.NET MVC 2驗證不起作用,但我無法找到足夠的關於它如何工作能夠做到這一點。ASP.NET MVC 2中的驗證如何實際工作?

我已經按照這useful article by David Hayden這似乎是目前最好的文檔中的步驟,但沒有實際發生。

我得到驗證時,我提交給服務器(正如我從預覽1時,當我添加數據註釋到我的模型),但我沒有得到任何客戶端驗證。

我如何追蹤測試?到目前爲止,我已經驗證了以下明顯的事情

  • MicrosoftMvcJQueryValidation.js和jquery.validate.min.js文件被下載
  • Html.ClientValidationEnabled =真

我不能很容易地看到是什麼連接到哪些事件以瞭解如何調試它。

回答

3

爲了驗證客戶端的字段,您必須在該視圖中指定對該字段的Html.ValidationMessage/Html.ValidationMessageFor對於<>的調用(就像David在鏈接的教程中所做的那樣)。這實質上是您想要爲該字段運行驗證的客戶端驗證邏輯的觸發器。

如果在某些情況下,您實際上不希望驗證消息直觀地顯示在每個字段中(即通過使用Html.ValidationMessage),而是允許摘要成爲驗證錯誤消息的唯一來源(即通過使用Html.ValidationSummary),您仍然需要某種方式來「觸發」驗證以發生針對您想要的特定字段。這可以通過在你的視圖中使用Html.Validate/Html.ValidateFor <>方法來實現。這些助手不會渲染任何東西,但只需註冊指定的字段進行客戶端驗證。

這兩個要求都存在,因爲您可能不希望客戶端驗證自動驗證模型對象上的每個屬性,因爲它們中的一些可能不是您希望驗證的窗體的一部分。

10

這是我學到的:

最重要的

  • HTML表單必須與使用指令,不只是BeginForm和端部結構上進行創建。
  • 在你開始你「形式」
  • 必須使用Html.ValidationMessage爲每個字段
  • 您必須設置Html.ClientValidationEnabled =各部分控制真,則必須設置Html.ClientValidationEnabled =真(ASCX)

工作原理(很簡單的概述)

  • 當你這樣做的HTML。BeginForm它會在ViewContext一個「FormContext」
  • 當使用ValidationMessage幫手,元數據被放入當窗體被設置(由使用語句)的形式的上下文
  • 它寫出所有的驗證代碼

MISC

  • 我似乎無法得到驗證工作時,我有一個局部控制,如果控制使用不同的模型從定義表單視圖。

  • 您不需要使用Html.TextBoxFor或Html.ValidationMessageFor,您可以使用Html.TextBox和Html.ValidationMessage