【发布时间】:2011-10-24 12:33:21
【问题描述】:
问题:
当向 EntityCollectionView 添加新项目时,需要对字符串字段进行验证,但出于我的目的,我们应该在服务器端验证后显示它。
实际行为:
这是元数据文件中的代码:
[MetadataTypeAttribute(typeof(SomeEntityMetadata))]
public partial class SomeEntity
{
[EntityName]
internal sealed class SomeEntityMetadata
{
private SomeEntityMetadata()
{
}
public long Id { get; set; }
[EntityName(Name = "Name", OrderIndex = 2)]
public string Name { get; set; }
[EntityName(Name = "Data Type", OrderIndex = 1)]
public string Type { get; set; }
}
}
以及这些项目的集合绑定到 xaml 中的DataGrid:
<navigation:DataGridTemplateColumn CanUserReorder="True"
CanUserSort="True"
Header="Name"
SortMemberPath="Name">
<navigation:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center" Text="{Binding Name}"/>
</DataTemplate>
</navigation:DataGridTemplateColumn.CellTemplate>
<navigation:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Name, Mode=TwoWay}" Height="Auto"/>
</DataTemplate>
</navigation:DataGridTemplateColumn.CellEditingTemplate>
</navigation:DataGridTemplateColumn>
<navigation:DataGridTemplateColumn CanUserFilter="True"
CanUserSort="True"
Header="Type"
SortMemberPath="Type">
<navigation:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center" Text="{Binding Type}" />
</DataTemplate>
</navigation:DataGridTemplateColumn.CellTemplate>
<navigation:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataTypes, Source={StaticResource entityViewModel}}" SelectedItem="{Binding Type, Mode=TwoWay}/>
</DataTemplate>
</navigation:DataGridTemplateColumn.CellEditingTemplate>
</navigation:DataGridTemplateColumn>
如您所见,字段没有 [Required] 属性,但是当插入新项目并将 Name 和 Type 字段设置为 String.Empty 时,错误 “名称字段是必需的”和 “类型字段是必需的” 出现。
需要的行为:
当Name 或Type 字段为空时,跳过所需的验证并从服务器抛出ValidationException。
注意:Silverlight、EF、WCF RIA、MVVM。
【问题讨论】:
-
如果您想自己抛出验证异常,那么为什么要从服务器执行它,为了节省服务器的往返行程,wcf Ria 服务使这变得更容易。
-
@AkashKava,你是对的,但我需要在上下文中进行一些复杂的检查。
标签: c# silverlight entity-framework validation mvvm