2011-10-24 20 views
10

Vấn đề:

Khi thêm mục mới vào EntityCollectionView tăng xác nhận cần thiết cho các lĩnh vực chuỗi, nhưng đối với mục đích của tôi chúng ta nên thể hiện nó sau khi xác nhận trên phía máy chủ.

hành vi thực tế:

Đây là mã từ tập tin siêu dữ liệu:EF. Cần xác nhận lỗi cho các lĩnh vực chuỗi tăng mà không [Bắt buộc] thuộc tính

[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; } 

    } 
} 

Và một bộ sưu tập các mặt hàng này binded đến DataGrid trong XAML:

<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> 

Như bạn thấy không có thuộc tính [Required] cho các trường, nhưng khi chèn mục mới w ith NameType trường được đặt thành String.Empty lỗi "Trường tên là bắt buộc""Trường loại là bắt buộc" xuất hiện.

hành vi cần thiết: Skip cần xác nhận và ném ValidationException từ máy chủ khi Name hoặc Type các trường là trống rỗng.

LƯU Ý: Silverlight, EF, WCF RIA, MVVM.

+1

Nếu bạn muốn ném ngoại lệ xác thực thì tại sao bạn muốn làm điều đó từ máy chủ, để tiết kiệm chuyến đi khứ hồi từ máy chủ, nó đã được thực hiện dễ dàng hơn bởi các dịch vụ của bà Rịa. –

+0

@AkashKava, bạn nói đúng, nhưng tôi cần thực hiện một số kiểm tra phức tạp trong ngữ cảnh. –

Trả lời

28

Đối với điều này bạn có thể đặt

[Required(AllowEmptyStrings=true)] 

Mở thuộc tính bạn muốn đi qua.

+1

Cảm ơn bạn! Nó giúp. –

Các vấn đề liên quan