2013-10-05 1 views
0

Я не могу войти в свой пользовательский RequiredAttribute.Невозможно вступить в MVC Custom RequiredAttribute

Я следовал этой статье How to: Debug .NET Framework Source

в Сервис> Параметры> Debugging> Общие:

Я Enable .NET Framework source stepping галочкой

У меня есть Enable Just My Code флажков

Я создал основной пример пользовательский RequiredAttribute с модульным тестом:

using System.ComponentModel.DataAnnotations; 

public class CustomRequiredAttribute : RequiredAttribute 
{ 
    public bool IsValid(object value, object container) 
    { 
     if (value == null) 
     { 
      return false; 
     } 

     string str = value as string; 

     if (!string.IsNullOrWhiteSpace(str)) 
     { 
      return true; 
     } 

     return false; 
    } 
} 

Используется этой тестовой модели:

public class CustomRequiredAttributeModel 
{ 
    [CustomRequired] 
    public string Name { get; set; } 
} 

Вот тест блок (который проходит Assert правильно):

[Fact] 
    public void custom_required_attribute_test() 
    { 
     // arrange 
     var model = new CustomRequiredAttributeModel(); 
     var controller = AccountController(); 

     // act 
     controller.ValidateModel(model); 

     // assert 
     Assert.False(controller.ModelState.IsValid); 
    } 

Тест модуль использует этот вспомогательный метод:

using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Web.Mvc; 

public static class ModelHelper 
{ 
    public static void ValidateModel(this Controller controller, object viewModel) 
    { 
     controller.ModelState.Clear(); 

     var validationContext = new ValidationContext(viewModel, null, null); 
     var validationResults = new List<ValidationResult>(); 

     Validator.TryValidateObject(viewModel, validationContext, validationResults, true); 

     foreach (var result in validationResults) 
     { 
      if (result.MemberNames.Any()) 
      { 
       foreach (var name in result.MemberNames) 
       { 
        controller.ModelState.AddModelError(name, result.ErrorMessage); 
       } 
      } 
      else 
      { 
       controller.ModelState.AddModelError("", result.ErrorMessage); 
      } 
     } 
    } 
} 
+0

Где моя точка останова? Как создается ваш контроллер? Что вы на самом деле испытываете? –

+0

Моя точка останова находится в методе IsValid в классе CustomRequiredAttribute. Он не попадает, но код должен быть запущен, потому что модульный тест проходит правильно, т. Е. Контроллер.ModelState.IsValid равен false. – Robs

ответ

1

В вашем CustomRequiredAttribute измените свой метод на использование переопределения,

public class CustomRequiredAttribute : RequiredAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     if (value == null) 
     { 
      return false; 
     } 

     string str = value as string; 

     if (!string.IsNullOrWhiteSpace(str)) 
     { 
      return true; 
     } 

     return false; 
    } 
} 
Смежные вопросы