Ошибка проверки ASP.NET MVC 3 не срабатывает при использовании сложного типа в Entity Framework - PullRequest
0 голосов
/ 06 февраля 2011

Сейчас я работаю над формой, позволяющей пользователю публиковать контент, я хочу использовать редактор WMD, поэтому в моей модели Entity Framework у меня сложный тип с именем Content , содержит поля HTML и WMD.

В форме есть текстовое поле для заголовка и редактор WMD для Content, я использовал каркас FluentValidation, как указано ниже:

public class ArticleValidator : AbstractValidator<Article>
{
    public ArticleValidator()
    {
        RuleFor(x => x.Title).NotEmpty();
        RuleFor(x => x.Content.WMD).NotEmpty();
    }
}

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

Кажется, сложный тип, который я создал в модели Entity Framework, вызывает эту проблему. Раньше у меня были отдельные свойства для ContentHtml и ContentWMD, и все работало нормально.

Есть ли обходной путь без необходимости возвращаться туда, где я был?

1 Ответ

0 голосов
/ 06 февраля 2011

Вы не можете использовать определение вложенного правила следующим образом:

RuleFor(x => x.Content.WMD).NotEmpty();

Вам необходим еще один валидатор для типа контента:

public class ArticleValidator : AbstractValidator<Content>
{
    public ArticleValidator()
    {
        RuleFor(x => x.WMD).NotEmpty();
    }
}

При этом не следует использовать модели EFвнутри ваших взглядов.Вы должны использовать модели представления и определить правила проверки для вашей модели представления:

public class ArticleValidator : AbstractValidator<ArticleViewModel>
{
    public ArticleValidator()
    {
        RuleFor(x => x.Title).NotEmpty();
        RuleFor(x => x.Content).NotEmpty();        
    }
}
...