【问题标题】:ASP.NET MVC 3: unobtrusive JavaScript validationASP.NET MVC 3:不显眼的 JavaScript 验证
【发布时间】:2011-07-09 12:53:48
【问题描述】:

a lot of examples关于如何“创建自己的模型”。用 DataAnnotations 标记它们。 Scott Guthrie 解释了在使用 ORM 时如何使用 validate your model。我没有发现您的模型实际上是从外部 DLL 进入的。你如何验证它?

例子:

/* Class coming in from an third-party DLL file. */
public class Person
{
    public string Name{get;set;}
    public int Age {get;set;}
}

我正在考虑的解决方案:继承外部类,然后将[MetadataType]应用于继承的类。

[Metadata(typeof(Person2_Validation))]
public class Person2:Person{}

public class Person2_Validation
{
    [Required,Stringlength(50,ErrorMessage="Name required"]
    public string Name{get;set;}

    [RegularExpression("([0-9]+)")]
    public int Age
}

有没有更好的办法?

【问题讨论】:

    标签: validation asp.net-mvc-3 unobtrusive-javascript


    【解决方案1】:

    您可以创建一个模型并使用 Mapper(如 AutoMapper 或 EmitMapper 或 ValueInjecter)在您的对象之间进行映射,并根据映射的模型进行验证。

    当您需要将对象传回时,您可以在您的模型和接收的模型之间进行映射。

    这与 ASP.NET MVC 中的 ViewModel 方法非常相似。

    所以它是这样的:

    A 类(DLL 中的类) B 类(您的型号)

    您在 B 上设置所有注释,并创建您需要的任何属性。

    您使用的是 B。当您从存储库/源中获取某些内容时,您映射(复制所有相关值)A=>B 并将其发送(假设为视图中的模型)。

    当您收到 B 返回时,您对其进行验证,然后将其映射到 B=>A 的另一个方向,并将其发送到存储库/服务。

    顺便说一句:即使模型 A 是您的班级,我也建议使用这种方法。

    Why use ViewModels instead of Domain Models in Views.

    【讨论】:

      【解决方案2】:

      @Linkgoron 的答案是正确的。您正在搜索视图模型与域模型。我们需要认为来自 dll 的模型是一个域模型,并将其映射到我们自己的视图模型,就像我们在处理我们自己的存储库/持久性时所做的那样。这是一个最佳实践。不用担心映射器,它会自动映射。

      看这个例子: http://weblogs.asp.net/shijuvarghese/archive/2010/02/01/view-model-pattern-and-automapper-in-asp-net-mvc-applications.aspx

      看到这个@Nick DeVore 回答为什么在这里查看模型而不是域模型 Why Two Classes, View Model and Domain Model?

      还有

      Bestpractice - Mixing View Model with Domain Model

      您的问题可能是原因之一:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-06
        • 1970-01-01
        • 2011-12-22
        • 2011-06-28
        • 2011-09-20
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        相关资源
        最近更新 更多