0

现在我正在制作一个让用户发布内容的表单,我想使用 WMD 编辑器,所以在我的实体框架模型中,我有一个名为 的复杂类型Content,它包含 HTML 和 WMD 字段。

在表单中,有一个标题的文本框和一个 WMD 编辑器Content,我使用了 FluentValidation 框架,如下所示:

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

当我在不输入任何内容的情况下提交此表单时,客户端验证只会将标题视为无效。如果我在标题中输入内容,表单提交(即使内容为空),然后在服务器端捕获错误(空内容),然后使用我输入的信息重新加载页面,但没有错误消息被显示。

我在实体框架模型中创建的复杂类型似乎导致了这个问题。我曾经有单独的属性,ContentHtml并且ContentWMD效果很好。

有没有办法解决这个问题而不必回到我原来的位置?

4

1 回答 1

0

您不能像这样使用嵌套规则定义:

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

您需要有另一个 Content 类型的验证器:

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();        
    }
}
于 2011-02-06T09:36:33.313 回答