2009-09-28 48 views
0

我有一個jQuery autocomplete fild從我的MVC操作獲取現有數據。我想確保輸入到數據庫中的數據不存在。xVal強制一個字段進入錯誤狀態

我有這個工作在自動完成上使用.result和.change來設置字段class =「input-validation-error」。當我添加xVal客戶端驗證這仍然有效,但xVal似乎清除css類,所以現在字段條目短暫地變紅,然後返回到清除背景。

與其嘗試更改xVal代碼,我寧願得到xVal客戶端驗證,以顯示正常客戶端數據驗證錯誤的錯誤狀態字段。

我該怎麼做?我可以在自動完成.result事件中使用哪些代碼來強制xVal中的錯誤狀態?

更新: 我試過Wyatt Barnett的想法,但你可以從我的評論中看到它不是我想要的。以下是對我的代碼:

場標記:

  <p> 
       <%= Html.LocalisedLabel("ProjectId") %> 
       <%= Html.TextBox("project.ProjectId") %> 
       <%= Html.ValidationMessage("project.ProjectId", "*") %> 
      </p> 

的XVAL標記:

 <%= Html.ClientSideValidation<ProjectBO>("project").UseValidationSummary("myValidationSummary") %> 
      <%= Html.ClientSideValidation<ProjectBO>("project").AddRule("ProjectId", new RemoteRule(Url.Action("ValidateProjectIdCreate", "LookUp", new { projectId = Model.ProjectId})))%> 

爲自動完成的JavaScript標記:

<script type="text/javascript"> 

    $(document).ready(function() { 
     $('#project_ProjectId').autocomplete('<%= Url.Action("ProjectIdList", "LookUp") %>', 
{ 
    delay: 10, 
    minChars: 1, 
    matchCase: 0, 
    matchSubset: 1, 
    autoFill: false, 
    maxItemsToShow: 10, 
    cacheLength: 10 
} 
); 

     $('#project_ProjectId').result(function(item) { 
      if (item) { 
       //match 
       $('#project_ProjectId').attr("class", "input-validation-error"); 
      } 
      else { 
       $('#project_ProjectId').removeAttr("class"); 
      } 
     }); 
     $('#project_ProjectId').change(function() { 
      $('#project_ProjectId').attr("class", ""); 
     }); 
    }); 
</script> 

這個腳本給我處理事件,但我可以放入什麼?

回答

1

爲什麼不是upgrade to xVal 1.0並利用它的ajax驗證玩具?這樣你就不必在這個框架上打架。


OK,既然這個角度將無法正常工作,也許你可以使用autocomplete.result與jQuery驗證結合API(XVAL也乘坐這一點)來處理事情。

+0

其實我是最新版本。看起來我需要檢查ajax驗證玩具!會去做, – Redeemed1 2009-09-29 14:02:42

+0

好吧,我試過,但它的工作原理並不是我想要的。我在這個領域使用了自動完成功能,在緩存和提供給用戶的線索方面非常有效。此外,xVal遠程驗證器會在輸入的每個字符後返回到服務器。我想要的是驗證器(不是遠程調用)從我的代碼中被觸發,並從我的代碼中清除。 – Redeemed1 2009-09-29 16:05:25

+0

我可以使用autocomplete.result事件來做到這一點,但不知道在那個時候要在代碼中放置什麼。 一個缺點是要顯示一個錯誤條件,但這會強制提交一個塊 – Redeemed1 2009-09-29 16:07:15

0

終於搞定了。

我在輸入字段上使用了jQuery自動完成功能,通過顯示EXISTING數據庫條目的查找列表來爲用戶提供一些指導。

退出該字段時,通過從自動完成中選擇顯示的列表項或鍵入不存在的數據庫條目,xVal RemoteValidator會觸發以設置驗證失敗條件或將其清除。

代碼如下:

 <%= Html.ClientSideValidation<ProjectBO>("project").UseValidationSummary("myValidationSummary" 

.AddRule( 「專案編號」,新RemoteRule(Url.Action( 「ValidateProjectIdCreate」, 「查找」)))%>

自動完成腳本是如folows:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#project_ProjectId').autocomplete('<%= Url.Action("ProjectIdList", "LookUp") %>', 
      { 
       delay: 10, 
       minChars: 1, 
       matchCase: 0, 
       matchSubset: 1, 
       autoFill: false, 
       maxItemsToShow: 10, 
       cacheLength: 10 
      } 
     ); 
    }); 
</script> 

我然後取出autocomplete.result並在問題前面的代碼.change事件。

運作良好。