【问题标题】:EF. Required validation error for string fields raise without [Required] attribute英孚。没有 [Required] 属性的字符串字段的必需验证错误引发
【发布时间】: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] 属性,但是当插入新项目并将 NameType 字段设置为 String.Empty 时,错误 “名称字段是必需的”“类型字段是必需的” 出现。

需要的行为:NameType 字段为空时,跳过所需的验证并从服务器抛出ValidationException

注意:Silverlight、EF、WCF RIA、MVVM。

【问题讨论】:

  • 如果您想自己抛出验证异常,那么为什么要从服务器执行它,为了节省服务器的往返行程,wcf Ria 服务使这变得更容易。
  • @AkashKava,你是对的,但我需要在上下文中进行一些复杂的检查。

标签: c# silverlight entity-framework validation mvvm


【解决方案1】:

为此你可以设置

 [Required(AllowEmptyStrings=true)]

关于您要通过的属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多