2012-01-12 27 views

回答

2

這就是設計遠程驗證的方式。它向控制器動作發送一個AJAX請求以執行一些驗證,如果這些驗證失敗,則阻止提交。

由於用戶可以禁用JavaScript並能夠在未執行任何客戶端驗證的情況下提交,因此您認爲在提交表單時應該執行相同的驗證是正確的。因此,例如,您可以將此驗證邏輯外部化爲單獨的方法,您可以從用於遠程驗證的控制器操作以及POST表單提交後的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); 

     } 
    } 

VIEW

<div class="editor-field"> 
    @Html.EditorFor(model => model.TicketHD) 
    @Html.ValidationMessageFor(model => model.TicketHD) 
</div> 
+0

謝謝@Darin Dimitrov。我也會實現一個驗證邏輯服務器端。 **但只是另一個問題**:MVC3'標準'驗證如何工作? 我在我的模型上設置了其他屬性規則,如[Required],[MaxLength]等...爲什麼對於這些​​規則,當我提交時,出現驗證錯誤,而對於我的Remote驗證,我沒有相同的行爲? 是否存在一種爲Remote屬性進行驗證工作的方法? 謝謝! – Larry 2012-01-12 12:40:25

+0

@Larry,驗證屬性都來自'ValidationAttribute'。默認模型綁定器在嘗試綁定來自請求值的動作參數時調用驗證。因此,所有IsValid方法都會在數據註釋(包括RemoteAttribute)上調用。除此之外,下面是如何爲此屬性實現IsValid方法:public override bool IsValid(object value){return true; }'。現在你明白了爲什麼它不驗證服務器上的任何東西。如果你想執行驗證,你可以從它派生出來並覆蓋這個方法。 – 2012-01-12 12:55:10

+0

再次感謝。我是編程新手。你能更好地解釋我怎麼能在我的情況下推導出這個方法嗎? 我把我的代碼的一些重要部分放在原始問題中,THX – Larry 2012-01-12 13:40:28

相關問題