【问题标题】:In which order is model binding and validation done in ASP.NET MVC 2?ASP.NET MVC 2 中模型绑定和验证的顺序是什么?
【发布时间】:2010-03-22 17:32:45
【问题描述】:

我正在使用 ASP.NET MVC 2,并且正在使用每个视图的视图模型方法。我还使用 Automapper 将属性从我的域模型映射到视图模型。

以这个视图模型为例(带有用于验证目的的必需数据注释属性):

public class BlogPost_ViewModel
{
    public int Id { get; set; }
    [Required]
    public string Title { get; set; }
    [Required]
    public string Text { get; set; }
}

在帖子编辑器视图中,我使用的是富文本编辑器 (CKeditor)。因为 CKeditor 是一个 HTML 编辑器,所以我理想情况下需要 CKeditor 在提交表单时对用户的输入进行 HTMLencode,这样 ASP.NET 的输入验证就不会报错。这不是问题,因为 CKeditor 内置了这个功能,但是我需要在映射回域对象(通过 Automapper)之前解码 CKeditor 的输出。

我想添加一个新属性(到上面的视图模型)来解决这个问题,如下:

public string HTMLEncodedText {
    get { return HTMLEncode(Text); }
    set { Text = HTMLDecode(value); }
}

然后我可以将此属性绑定到视图中的 CKeditor,但仍使用 Automapper 映射控制器中的“文本”属性 - 所有这些都无需关闭输入验证。

我的问题是:您知道 ASP.NET MVC 2 中的模型绑定和验证过程是如何工作的吗?在执行验证之前是否绑定了所有模型属性?或者是每个单独的属性在设置时都得到验证。我认为理想情况下,我的想法需要在验证模型之前设置所有属性。

【问题讨论】:

    标签: asp.net-mvc validation ckeditor automapper


    【解决方案1】:

    首先验证属性,然后绑定它们。因此,对于您的视图模型,您可能必须在 HTMLEncodedText 属性上设置 [Required],而不是在 Text 属性上设置。

    【讨论】:

    • 你说得对,我刚刚意识到我需要将所有验证属性移动到新属性中才能使开箱即用的客户端验证工作。
    猜你喜欢
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多