Silverlight 如何获取自定义验证错误?

Silverlight 如何获取自定义验证错误?,silverlight,silverlight-4.0,wcf-ria-services,domainservices,Silverlight,Silverlight 4.0,Wcf Ria Services,Domainservices,假设我有一个属性为typeid和salary的实体Person。我为这两个属性构建了一个业务规则,如: public static partial class MyRules { public static ValidationResult Rule1(Person p, ValidationContext context) { if ((p.typeid == 1) && ((p.salar

假设我有一个属性为typeid和salary的实体Person。我为这两个属性构建了一个业务规则,如:

public static partial class MyRules
    {
        public static ValidationResult Rule1(Person p, ValidationContext context)
        {           

            if ((p.typeid == 1) && ((p.salary == null))
            {
                return new ValidationResult("type 1 must should have salary",
                                            new string[] { "Salary" });
            }

            return ValidationResult.Success;
        }
    }
代码与share.cs一起放在服务器端

因此,当违反规则时,我将使用SubmitOperation.HasError=true;只有在调用提交更改后才会出现这种错误。并且错误不会显示在ValidationSummary中


因此,当SubmitOperation.HasError=true时;我如何知道提交操作错误是验证错误而不是其他错误?当我可以将此错误识别为验证错误时,如何获取验证错误消息“type 1必须有薪水”并将其显示给用户?

我知道这已经快一年了;然而,没有人回答这个问题。我还没有回答任何问题,但我知道答案(或者至少有一个可能的答案)(请(并感谢)按回答打分)。下面是我在提交操作完成时如何处理验证结果。调用SubmitChanges时,需要使用回调和用户状态调用重载。这可能有点令人困惑,因为在回调(InsertEntityCompleted)中,我将op.userstate称为回调,但在本例中用户状态就是这样使用的

private void InsertEntityCompleted( SubmitOperation op )
    {
        var callback = op.UserState as Action<Exception, ICollection<ValidationResult>>;
        if ( callback != null )
        {
            var validationResults = new Collection<ValidationResult>();
            if ( op.HasError )
            {
                foreach ( var entity in op.EntitiesInError )
                {
                    //HOW YOU KNOW SUBMIT OPERATION ERROR IS VALIDATION ERROR
                    if ( entity.HasValidationErrors )
                        foreach ( var validationResult in entity.ValidationErrors )
                        {
                            //HOW YOU WOULD GET THE ERROR MESSAGES AND MEMBER NAMES
                            var name = validationResult.MemberNames;
                            var error = validationResult.ErrorMessage;
                            validationResults.Add(validationResult);
                        }

                }
                op.MarkErrorAsHandled();
            }
            //HOW YOU IDENTIFY ERROR AS VALIDATION ERROR AND NOT OTHER TYPE OF ERROR
            if ( op.Error != null &&
                op.Error is DomainOperationException &&
                ( op.Error as DomainOperationException ).Status == OperationErrorStatus.ValidationFailed )
                //I CALLBACK NULL FOR EXCEPTIONS, BUT I KEEP THE VALIDATION RESULTS ON VALIDATION ERRORS
                //THEN TO SHOW IT TO THE USER I IMPLEMENT INotifyDataErrorInfo IN MY VIEWMODEL 
                //AND MANAGE THE ERRORS THROUGH THAT IMPLEMENTATION, THE BOUND CONTROL SHOULD HAVE 
                //NotifyOnValidationError=True DEFINED IN THE BINDING
                callback( null, validationResults );
            else
                callback( op.Error, validationResults );
            _entityContext.Enitities.EntityContainer.Clear();
        }
    }
private void InsertEntityCompleted(提交操作op)
{
var callback=op.UserState作为操作;
if(回调!=null)
{
var validationResults=新集合();
如果(op.HASRERROR)
{
foreach(op.EntitiesInError中的var实体)
{
//如何知道提交操作错误是验证错误
if(entity.hasvalidateErrors)
foreach(entity.ValidationErrors中的var validationResult)
{
//如何获取错误消息和成员名称
var name=validationResult.MemberNames;
var error=validationResult.ErrorMessage;
添加(validationResult);
}
}
op.MarkErrorAsHandled();
}
//如何将错误识别为验证错误而不是其他类型的错误
如果(操作错误!=null&&
操作错误为DomainOperationException&&
(操作错误为DomainOperationException)。状态==OperationErrorStatus.ValidationFailed)
//对于异常,我回调NULL,但我保留验证错误的验证结果
//然后,为了向用户显示它,我在VIEWMODEL中实现了INotifyDataErrorInfo
//并通过该实现管理错误,绑定控件应该具有
//NotifyOnValidationError=绑定中定义的True
回调(null,validationResults);
其他的
回调(操作错误、验证结果);
_entityContext.enities.EntityContainer.Clear();
}
}

我知道这已经快一年了;然而,没有人回答这个问题。我还没有回答任何问题,但我知道答案(或者至少有一个可能的答案)(请(并感谢)按回答打分)。下面是我在提交操作完成时如何处理验证结果。调用SubmitChanges时,需要使用回调和用户状态调用重载。这可能有点令人困惑,因为在回调(InsertEntityCompleted)中,我将op.userstate称为回调,但在本例中用户状态就是这样使用的

private void InsertEntityCompleted( SubmitOperation op )
    {
        var callback = op.UserState as Action<Exception, ICollection<ValidationResult>>;
        if ( callback != null )
        {
            var validationResults = new Collection<ValidationResult>();
            if ( op.HasError )
            {
                foreach ( var entity in op.EntitiesInError )
                {
                    //HOW YOU KNOW SUBMIT OPERATION ERROR IS VALIDATION ERROR
                    if ( entity.HasValidationErrors )
                        foreach ( var validationResult in entity.ValidationErrors )
                        {
                            //HOW YOU WOULD GET THE ERROR MESSAGES AND MEMBER NAMES
                            var name = validationResult.MemberNames;
                            var error = validationResult.ErrorMessage;
                            validationResults.Add(validationResult);
                        }

                }
                op.MarkErrorAsHandled();
            }
            //HOW YOU IDENTIFY ERROR AS VALIDATION ERROR AND NOT OTHER TYPE OF ERROR
            if ( op.Error != null &&
                op.Error is DomainOperationException &&
                ( op.Error as DomainOperationException ).Status == OperationErrorStatus.ValidationFailed )
                //I CALLBACK NULL FOR EXCEPTIONS, BUT I KEEP THE VALIDATION RESULTS ON VALIDATION ERRORS
                //THEN TO SHOW IT TO THE USER I IMPLEMENT INotifyDataErrorInfo IN MY VIEWMODEL 
                //AND MANAGE THE ERRORS THROUGH THAT IMPLEMENTATION, THE BOUND CONTROL SHOULD HAVE 
                //NotifyOnValidationError=True DEFINED IN THE BINDING
                callback( null, validationResults );
            else
                callback( op.Error, validationResults );
            _entityContext.Enitities.EntityContainer.Clear();
        }
    }
private void InsertEntityCompleted(提交操作op)
{
var callback=op.UserState作为操作;
if(回调!=null)
{
var validationResults=新集合();
如果(op.HASRERROR)
{
foreach(op.EntitiesInError中的var实体)
{
//如何知道提交操作错误是验证错误
if(entity.hasvalidateErrors)
foreach(entity.ValidationErrors中的var validationResult)
{
//如何获取错误消息和成员名称
var name=validationResult.MemberNames;
var error=validationResult.ErrorMessage;
添加(validationResult);
}
}
op.MarkErrorAsHandled();
}
//如何将错误识别为验证错误而不是其他类型的错误
如果(操作错误!=null&&
操作错误为DomainOperationException&&
(操作错误为DomainOperationException)。状态==OperationErrorStatus.ValidationFailed)
//对于异常,我回调NULL,但我保留验证错误的验证结果
//然后,为了向用户显示它,我在VIEWMODEL中实现了INotifyDataErrorInfo
//并通过该实现管理错误,绑定控件应该具有
//NotifyOnValidationError=绑定中定义的True
回调(null,validationResults);
其他的
回调(操作错误、验证结果);
_entityContext.enities.EntityContainer.Clear();
}
}