Смущен асинхронной проверкой в ​​Silverlight 4 - PullRequest
0 голосов
/ 10 июня 2011

Скажем, у меня есть поле имени пользователя в моей форме, и я хочу проверить его с помощью асинхронной проверки, сделав вызов [Invoke] на стороне сервера.Предположим, у меня есть еще 2-3 поля в формах, а затем у меня есть метод submit, который в основном добавит пользователя в базу данных, если все пойдет хорошо.Теперь, поскольку проверка является асинхронной, пользователь все еще может вводить другие поля, и что, если вызов на сервер не был завершен, и до того, как ответ будет возвращен, клиент завершит заполнение формы и нажмет кнопку отправки?Я обязан получить ошибку.Как мне справиться с этими типами ошибок?Должен ли я отключить кнопку Отправить?Если да, то как?потому что я подключаю логику вызова Async в методах расширения RIA, то есть в частичном классе на клиенте, например:

public void OnUsernameChanging()
{
    //make service call and handle it..
}

Этот метод находится в классе Entity, а не в коде позади.Таким образом, я не могу получить ссылку, чтобы отправить кнопку на странице и отключить ее.Как мне с этим справиться?Один из вариантов заключается в том, что я использую шаблон MVVM, у меня всегда есть класс Messenger, и через него я могу его отключить.Существуют ли другие варианты, если класс Messenger недоступен?Я надеюсь, что вы получили мой вопрос.Если нет, скажите, пожалуйста, я постараюсь объяснить лучше.

Заранее спасибо:)

1 Ответ

0 голосов
/ 17 января 2012

Когда я реализовал подобное решение, я перешел на старое устройство;

Хорошо с проверкой на стороне клиента, но имеет значение проверка на стороне сервера.

Асинхронная проверка на стороне клиента IE используется для целей отображения, реальная проверкалибо в метаклассах сущностей, либо, если конкретнее, в соответствующих [update] и [insert] методах службы.Простой пример, приведенный ниже:

    if (!IsValidExampleEntity(entityToAddOrUpdate)) {
      var result = new ValidationResult(
         "A nice message", 
         new string[]{"the", "entity", "properties", "in", "error","as", "ienumerable<string>"});
      throw new ValidationException(result, null, entityToAddOrUpdate);
    } else {
      // Store it or whatnot...
    }

Не запрещайте пользователю вводить подмию, но при отправке выставляйте указатель занятости или что-то еще.

...