修正验证错误后,Silverlight 验证抛出异常

4

我目前正在开发一款Silverlight业务应用程序,并且第一次开始进行验证。当我遇到验证错误时,控件会按预期显示错误,但是当我修复验证错误并移动到DataForm中的下一个字段(实际上是Telerik RadDataForm,这很重要)时,在.g.cs文件中我的实体的setter方法中会抛出ArgumentOutOfRangeException异常。以下是生成的代码:

[DataMember()]
[Display(Name="Email / User Name")]
[RegularExpression("^.*@.*\\..*$", ErrorMessage="Must be a valid e-mail address")]
[Required()]
public string Email
{
    get
    {
        return this._email;
    }
    set
    {
        if ((this._email != value))
        {
            this.OnEmailChanging(value);
            this.RaiseDataMemberChanging("Email");
            this.ValidateProperty("Email", value); // <-- Exception thrown here
            this._email = value;
            this.RaiseDataMemberChanged("Email");
            this.OnEmailChanged();
        }
    }
}

以下是导致验证的控件的Xaml代码:

<telerik:RadDataForm Grid.Row="0" Style="{StaticResource GridPageFormStyle}" 
                 x:Name="addForm" EditEnded="AddEnded" Header="Add">
    <telerik:RadDataForm.EditTemplate>
        <DataTemplate>
            <StackPanel>
                <telerik:DataFormDataField 
                                DataMemberBinding="{Binding Email, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}" 
                                Label="E-mail Address" />
                <telerik:DataFormComboBoxField 
                                DataMemberBinding="{Binding Role, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}" 
                                ItemsSource="{Binding Roles, ElementName=This}" Label="Role" />
                <telerik:DataFormComboBoxField DataMemberBinding="{Binding Partner, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}" 
                                               ItemsSource="{Binding Partners, ElementName=This}" Label="Partner" />
            </StackPanel>
        </DataTemplate>
    </telerik:RadDataForm.EditTemplate>
    </telerik:RadDataForm>

以下是异常的文本:

    {System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)}

有人知道为什么会抛出这个异常吗?或者有什么好的调试策略吗?我无法进入实际引发异常的代码。

2个回答

1

我还不确定到底发生了什么,但是调试时我可以直接跳过错误,一切都正常工作。而且,如果不进行调试,这些错误甚至不会出现,所以我现在打算暂时忽略它。


1
你在那方面有什么运气吗?我有一个类似的验证问题,在没有调试的情况下可以正常工作,但是在调试时非常烦人。 - Nikos Tsokos

1
在我的情况下,答案是在调试设置中取消选中“当异常跨越AppDomain或托管时中断...”。 source

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接