2009-09-28 2 views
0

У меня есть jQuery autocomplete fild, который получает существующие данные из моего действия MVC. Я хочу убедиться, что данные, введенные в поле, НЕ СУЩЕСТВУЮТ в базе данных.xVal, чтобы ввести поле в состояние ошибки

У меня была эта работа с использованием .result и .change на автозаполнении, чтобы установить поле в класс = "ошибка ввода-проверки". Когда я добавил проверку клиента xVal, это все еще работает, но xVal, похоже, очищает класс css, поэтому теперь заголовок поля краснеет кратковременно, а затем возвращается к прозрачному фону.

Вместо того, чтобы пытаться изменить код xVal, я предпочел бы получить проверку клиента xVal для отображения поля в состоянии ошибки, как и для обычных ошибок проверки данных клиента.

Как мне это сделать? Какой код я могу использовать в событии autocomplete .result, чтобы заставить состояние ошибки в xVal?

Обновление: Я пробовал идею от Уайетта Барнетта, но, как вы можете видеть из моих комментариев, это не то, что я хочу. Вот код того, что у меня есть:

Поле разметки:

  <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 в сочетании с API проверки JQuery (xVal также едет в этом), чтобы обращаться с вещами.

+0

Фактически я нахожусь на последней версии. Похоже, мне нужно проверить игру валидации ajax! Пойду и сделаю это – Redeemed1

+0

Хорошо, я пробовал это, но пока он работает, это не то, что я хочу. Я использую автозаполнение в поле, которое довольно эффективно с точки зрения его кэширования и подсказок, которые оно дает пользователю. Кроме того, XVal Remote Validator возвращается на сервер для каждого введенного символа. Я хочу, чтобы у меня был отключен валидатор (а не удаленный вызов), который удаляется из моего кода. – Redeemed1

+0

Я могу использовать событие autocomplete.result для этого, но не знаю, что положить в код в этот момент. Альтернативный путь для отображения состояния ошибки, но это вынудит блок для отправки – Redeemed1

0

Наконец-то это получилось.

Я использовал автозаполнение jQuery в поле ввода, чтобы предоставить некоторые рекомендации пользователю, отобразив список поиска СУЩЕСТВУЮЩИХ записей базы данных.

При выходе из поля путем выбора отображаемого элемента списка из автозаполнения или путем ввода несуществующей записи базы данных xVal RemoteValidator запускает либо установку условия отказа проверки, либо очищает его.

код выглядит следующим образом:

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

.AddRule ("ProjectID", новый RemoteRule (Url.Action ("ValidateProjectIdCreate", "LookUp")))%>

автозаполнения сценарий как 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 и .Кнопкой события в предыдущем коде в этом вопросе.

Хорошо работает.