Могу ли я проверить состояние модели без привязки модели? - PullRequest
14 голосов
/ 18 августа 2011

Я уже не могу понять, что такое Entity Framework, и мне интересно, есть ли способ проверить состояние модели без привязки модели.

Допустим, я создаю пользователя в основном из кода.как мне проверить, чтобы убедиться, что он действителен в соответствии с моими предопределенными аннотациями данных перед обновлением?

    public ActionResult Index()
    {
        User u = new User();
        u.Username = "test";
        u.Password = "test";
        u.Email = "test";

        DefaultContext db = new DefaultContext();            

        if (ModelState.IsValid)
        {
            db.Users.Add(u);
            db.SaveChanges();
            Response.Write(u.Id);
        }
        else
            // model is not valid

        return View();
    }

Приведенный выше код не работает, поскольку привязка не происходит.Или, может быть, я запутался в процессе.

Спасибо.

Ответы [ 2 ]

18 голосов
/ 18 августа 2011

ModelState не будет доступен, потому что он настроен связывателем модели.ModelBinder не связывал модель, поэтому он не запускал проверку, поэтому ModelState будет пустым.

Но это не останавливает вас от использования атрибутов и выполнения проверки.

Если вы используете атрибуты DataAnnotation, вы можете запустить проверку без привязки модели.

Учитываяэтот класс:

public class Widget
{
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    public decimal Price { get; set; }
}

Вы можете сделать это:

        var widget = new Widget
                        {
                            Id = 12,
                            Price = 15.57M
                        };

        var context = new ValidationContext(widget, null, null);
        var results = new List<ValidationResult>();
        if( Validator.TryValidateObject( widget, context, results, true ) )
        {
            //Validation Successful
        }
        else
        {
            //Validation Failed
        }

Свойство Name не было задано, и TryValidateObject () завершится ошибкой.Сбор результатов будет иметь фактическую ошибку, которая произошла.

10 голосов
/ 18 августа 2011

вы можете использовать TryValidateModel или ValidateModel

 User u = new User();
    u.Username = "test";
    u.Password = "test";
    u.Email = "test";


    if (TryValidateModel(u))
     {

     }else{

     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...