RIA Services Decimal必需字段不会导致验证错误

时间:2011-06-09 12:58:33

标签: silverlight service ria

我正在使用带有RIA服务的Silverlight 4。我使用EDMX在Web应用程序上创建了域服务。对于一个Entity表,我有一个名为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),我会得到正确的验证消息,并且域上下文不会尝试更新数据库。 / p>

我的问题是,如果我没有为Unitprice输入任何值,则不会出现验证,数据上下文会尝试更新数据库并导致无法处理的异常错误

有人可以建议一种方法来使验证消息与Range验证一样出现,还是我需要手动检查UnitPrice字段是否正确并在出现错误时显示消息框?

由于

标记

1 个答案:

答案 0 :(得分:0)

我认为这个问题与绑定TargetNullValue='Price'的这个属性有关。这指定如果源为null,则使用值“Price”。尝试删除它,看看是否能解决问题。

希望这会有所帮助:)