asp.net MVC3 Пользовательская проверка - PullRequest
2 голосов
/ 02 октября 2011

Я новичок в MVC, поэтому этот вопрос может быть наивным

Я знаю, что вы можете добавить атрибуты проверки к свойствам модели, и инфраструктура обеспечит соответствующую проверку на стороне сервера и на стороне клиента. Однако я вынужден использовать устаревшую структуру базы данных, в которой одно из свойств в модели имеет тип int или «строка» а другой тип данных (значение) определяется первым свойством. Это означает, что я не могу использовать аннотации для проверки. Но есть ли какой-либо простой способ программно «аннотировать» свойства после того, как значения извлечены из базы данных и создан класс модели. Если это можно сделать, тогда он сделает эффективную (на стороне клиента) проверку без особых хлопот. спасибо

Ответы [ 2 ]

3 голосов
/ 12 октября 2011

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

В вашем случае было бы довольно легко выполнить проверку на основе модели.

Для проверка на стороне сервера :

public class MyModel: IValidatableObject
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }

    public IEnumerable<ValidationResult>
        Validate(ValidationContext validationContext)
    {
        var relevantFields = new [] {"Prop2"};
        if (Prop1 == "Int" && NotValidInt(Prop2))
            yield return new ValidationResult("Prop2 must be convertable to int", relevantFields);
        else if (prop1 == "String" && NotValidString(Prop2))
            yield return new ValidationResult("Prop2 must be convertible to string", relevantFields);
    }
}

Для проверки на стороне клиента , это немного сложнее, но подробности доступны здесь:

См. Пользовательский раздел проверки бесплатного Pluralsight обучения по проверке для получения дополнительной информации о проверке на стороне сервера.

2 голосов
/ 12 октября 2011

Вы попадаете в обычную ошибку новичка, считая вашу базу данных буквой M в MVC.Любое нетривиальное приложение потребует от вас отделить модель базы данных от модели представления.Поэтому примените ваши атрибуты к модели представления, а затем используйте бизнес-логику, чтобы скопировать значения в модель базы данных, когда представление правильно проверено.

MVC - это шаблон пользовательского интерфейса, и базы данных к нему не относятся.Я знаю, что каждое приложение-пример под солнцем передает ваши объекты данных в представление, но это не совсем то, что нужно.

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