ASP.NET MVC 3: ненавязчивая проверка JavaScript - PullRequest
3 голосов
/ 05 марта 2011

Есть множество примеров о том, как "создать свою собственную модель". Пометьте их аннотациями данных. Скотт Гатри объясняет, как проверить вашу модель при использовании ORM . Чего я не нахожу, так это того, что ваша модель действительно поступает из внешней 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
}

Есть ли лучший способ?

Ответы [ 2 ]

4 голосов
/ 06 марта 2011

Вы можете создать модель и использовать Mapper (например, AutoMapper или EmitMapper или ValueInjecter ) для сопоставления между вашими объектами и проверки по сопоставленной модели.

Когда вам нужно перенести объект обратно, вы можете сопоставить модель с полученной моделью.

Это очень похоже на подход ViewModel в ASP.NET MVC.

Так что-то вроде этого:

Класс A (класс из DLL) Класс B (ваша модель)

Вы устанавливаете все свои аннотации на B и создаете любые нужные вам свойства.

То, что вы используете, это B. Когда вы получаете что-то из репозитория / источника, вы отображаете (копируете все соответствующие значения) A => B и отправляете это (скажем, как модель в View).

Когда вы получаете B обратно, вы проверяете его, а затем сопоставляете его другим способом B => A и отправляете его в хранилище / службу.

Кстати: я бы рекомендовал использовать этот подход, даже если модель А была ВАШИМ классом.

Зачем использовать ViewModels вместо доменных моделей в представлениях.

2 голосов
/ 11 марта 2011

@ Линкгорон ответ верен.Вы ищете модель представления против модели домена.нам нужно думать, что модель из dll является моделью предметной области, и сопоставить ее с нашей собственной моделью представления, как мы это делали даже при работе с собственным репозиторием / постоянством.это лучшая практика.не беспокойтесь о маппере, он будет отображаться автоматически.

См. этот пример: http://weblogs.asp.net/shijuvarghese/archive/2010/02/01/view-model-pattern-and-automapper-in-asp-net-mvc-applications.aspx

См. этот ответ @Nick DeVore, почему модель представления вместо модели домена здесь Почему дваКлассы, модель представления и модель домена?

, а также

Bestpractice - смешивание модели представления с моделью домена

Возможно, проблема однапричины:)

...