2012-01-06 4 views
0

Я хочу проверить модель View на классе.Проверка на уровне класса ViewModel

Я использую actionFilter. Как использовать аннотацию данных? и как ввести базу данных Access?

Подтверждение, которое произойдет, если клиент заявит, что это уже наш клиент или нет.

Я использовал фильтр действий, но я думаю, что он должен иметь способ использовать DataAnnotation

Комментарии код следующим образом:

public class DadosAssinaturaFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var model = filterContext.ActionParameters.Values.FirstOrDefault(x => x.GetType() == typeof(DadosAssinatura)) as DadosAssinatura; 
     var modelState = filterContext.Controller.ViewData.ModelState; 
     if (model != null) 
     { 
      var jaSouCliente = modelState.FirstOrDefault(x => x.Key == "JaSouCliente"); 
      if (jaSouCliente.Key != null) // select "Is Clilent" radiobutton ? 
      if (jaSouCliente.Value.Errors.Count > 0) // if so remove the errors of the registration data 
      { 
       modelState.RemoveKeysStartsWith("DadosCliente."); 
       modelState.RemoveKeysStartsWith("DadosAcesso."); 
      } 
      else if (model.JaSouCliente != null && model.JaSouCliente.Value) // else, click in "Is Client" 
      { 
       modelState.RemoveKeysStartsWith("DadosCliente."); //remove 

       modelState.Remove("DadosAcesso.ConfirmaSenha"); //how injec UnitOfWor/Repository? AutoFac? 
       if (unitOfWork.Client.GetClientByUser(model.DadosAcesso.Usuario, model.DadosAcesso.Senha) == null)//user and Password 
       modelState.AddModelError("DadosAcesso.Usuario", "Usuario Nao Encontrado"); 
      } 
      else if (model.DadosCliente.PessoaFisica) // is a company our people? 
      { 
       modelState.Remove("DadosCliente.RazaoSocial"); // remove validate for company name 
       modelState.Remove("DadosCliente.Cnpj"); //the brazilian document of company 
      } 
      else modelState.Remove("DadosCliente.Cpf"); //the brazilian document of people 
     } 

     base.OnActionExecuting(filterContext); 
    } 
} 

public static class ModelStateErros 
{ 

    public static void RemoveKeysStartsWith(this ModelStateDictionary modelStateDictionary, string startsWith) 
    { 
     var keys = modelStateDictionary.Keys.Where(key => key.StartsWith(startsWith)).ToList(); 
     foreach (var variable in keys) 
     { 
      modelStateDictionary.Remove(variable); 
     } 
    } 
} 

жаль мой английский

ответ

0

Просто реализовать IValidateableObject в классе ViewModel (или создать еще один неполный класс) и полностью исключить фильтр, и сохраните свою логику проверки с помощью ViewModel.

How do I use IValidatableObject?

+0

, но мне нужно, чтобы удалить ошибки –

+0

нет, если его проблема, которую вы просто не поднять ошибку, а не беспокоиться об удалении их. эта логика должна существовать в вашей модели представления (если она доступна там), так как это видимая проверка VIEW. –