Asp.net mvc 3 ViewModel类级验证

Asp.net mvc 3 ViewModel类级验证,asp.net-mvc-3,repository,data-annotations,autofac,Asp.net Mvc 3,Repository,Data Annotations,Autofac,我想在类级别验证我的视图模型 我正在使用actionFilter。如何使用数据注释? 如何注入Access数据库 如果客户表示其是否已经是我们的客户,则会进行验证 我使用了ActionFilter,但我认为它必须有一种使用DataAnnotation的方法 注释代码如下: 公共类DadosAssinaturaFilter:ActionFilterAttribute { 公共覆盖无效OnActionExecuting(ActionExecutingContext filterContext) {

我想在类级别验证我的视图模型

我正在使用actionFilter。如何使用数据注释? 如何注入Access数据库

如果客户表示其是否已经是我们的客户,则会进行验证

我使用了ActionFilter,但我认为它必须有一种使用DataAnnotation的方法

注释代码如下:

公共类DadosAssinaturaFilter:ActionFilterAttribute
{
公共覆盖无效OnActionExecuting(ActionExecutingContext filterContext)
{
var model=filterContext.ActionParameters.Values.FirstOrDefault(x=>x.GetType()==typeof(DadosAssinatura))作为DadosAssinatura;
var modelState=filterContext.Controller.ViewData.modelState;
如果(型号!=null)
{
var jaSouCliente=modelState.FirstOrDefault(x=>x.Key==“jaSouCliente”);
if(jasouclient.Key!=null)//选择“Is client”单选按钮?
if(jaSouCliente.Value.Errors.Count>0)//如果是,则删除注册数据的错误
{
modelState.removeKeysStartWith(“数据客户端”);
modelState.RemoveKeysStartsWith(“dadosaccso”);
}
否则,如果(model.JaSouCliente!=null&&model.JaSouCliente.Value)//否则,请单击“是客户端”
{
modelState.removeKeysStartWith(“DadoClient.”);//删除
modelState.Remove(“dadosaccso.ConfirmaSenha”);//如何使用injec UNITOWOR/Repository?AutoFac?
if(unitOfWork.Client.GetClientByUser(model.dadosaccso.Usuario,model.dadosaccso.Senha)==null)//用户和密码
modelState.addmodeleror(“dadosaccso.Usuario”、“Usuario Nao Encontrado”);
}
否则如果(model.DadosCliente.PessoaFisica)//公司是我们的员工吗?
{
modelState.Remove(“DadoClient.RazaoSocial”);//删除公司名称的验证
modelState.Remove(“dadoClient.Cnpj”);//公司的巴西文件
}
else modelState.Remove(“dadoclient.Cpf”);//巴西人文档
}
base.OnActionExecuting(filterContext);
}
}
公共静态类ModelStateErrors
{
公共静态void removeKeysStartWith(此ModelStateDictionary ModelStateDictionary,字符串StartWith)
{
var keys=modelStateDictionary.keys.Where(key=>key.StartsWith(StartsWith)).ToList();
foreach(键中的var变量)
{
modelStateDictionary.Remove(变量);
}
}
}

抱歉,我的英文版

只需在ViewModel类中实现IValidTeableObject(或创建另一个分部类),完全避免筛选,并将验证逻辑保留在ViewModel中


否,如果有问题,您只需不提出错误,而不用担心删除错误。这个逻辑应该存在于视图模型中(如果它在那里可用的话),因为这似乎是视图特定的验证。