Обязательное десятичное поле служб RIA, не вызывающее ошибки проверки

#silverlight #service #ria

#silverlight #Обслуживание #ria

Вопрос:

Я использую Silverlight 4 со службами RIA. Я создал доменную службу в веб-приложении, используя EDMX. Для одной таблицы сущностей у меня есть десятичное поле, называемое UnitPrice и помеченное в метаданных следующим образом:

 [Required(ErrorMessage="Price is required.",AllowEmptyStrings = false)]
[Range(typeof(decimal), "1", "1000",
      ErrorMessage = "Price must be between {1} and {2}")]
public decimal UnitPrice { get; set; }
  

На моем клиенте у меня есть страница для вставки новых записей, и поле привязано следующим образом:

 <TextBox  Grid.Column="1" Grid.Row="4" Name="txtPrice" 
          Text="{Binding Path=UnitPrice, Mode=TwoWay, NotifyOnValidationError=true,
          ValidatesOnExceptions=True, ValidatesOnDataErrors=True,
          TargetNullValue='Price', StringFormat={0:c}}" />
  

В кнопке сохранить на странице у меня есть следующее:

 if (newItem.HasValidationErrors)
{
    MessageBox.Show("please fix errors");
}
else
{
    try
    {
        db.SubmitChanges();
        EditWindow.Close();
    }
    catch (Exception ex)
    {

    }
}
  

Когда я захожу добавить новую запись, если я ввожу значение для цены за единицу как нечто выходящее за пределы диапазона, например -10, я получаю правильное сообщение о проверке, и контекст домена не пытается обновить базу данных.

Моя проблема в том, что если я не ввожу какое-либо значение для Unitprice, проверка не отображается, и контекст данных пытается обновить базу данных и вызывает ошибку исключения без обработки

Может ли кто-нибудь предложить способ заставить сообщение о проверке отображаться так же, как при проверке диапазона, или мне нужно вручную проверить, правильно ли указано поле UnitPrice, и отобразить окно сообщения, если возникает ошибка?

Спасибо

Отметить

Ответ №1:

Я думаю, что эта проблема связана с этим свойством привязки TargetNullValue='Price' . Это указывает, что значение ‘Price’ используется, если источник равен null. Попробуйте удалить его, чтобы посмотреть, решит ли это проблему.

Надеюсь, это поможет 🙂

Комментарии:

1. Спасибо, но я это уже пробовал. Даже если оно оставлено пустым, это вызывает проблему