Проверка mvc3 при использовании классов друзей - PullRequest
1 голос
/ 11 ноября 2011

Я работаю над приложением mvc3 и у меня возникли проблемы с получением проверки, чтобы работать так, как я хочу.

Приложение использует классы друзей для моделей. (Это то, что я не использовал в прошлом, и я немного запутался, почему они используются ... в любом случае)

Я хочу добавить обязательные поля, чтобы убедиться, что отправленные данные верны. Я попытался добавить обязательное поле в класс друзей.

Когда я отправляю форму, проверка на стороне клиента не происходит, и отладчик переходит в сгенерированный код структур сущностей. Вот жалуется, что поля, содержащие нулевые значения, являются недействительными. Если я пройдусь по всем этим, он, наконец, доберется до контроллера, где my if (ModelState.IsValid) показывает false.

У меня включена проверка на стороне клиента.

Должен ли я применять проверку данных на уровне класса собеседника или в модели представления?

Еще один вопрос - зачем использовать классы друзей? мне кажется, они слишком усложняют вещи.

Обновлено добавлен пример класса приятеля

[MetadataType(typeof (CustomerMetaData))]
public partial class Customer
{
    public string Priorty
    {
        get
        {
            var desc = (Priority) Priority;
            return desc.ToString().Replace('_', ' ');
        }
    }

internal class CustomerMetaData
{
    [Required]
    [DisplayName("Priorty")]
    public string Priorty { get; set; }

Ответы [ 3 ]

1 голос
/ 11 ноября 2011

Классы друзей - это классы метаданных, которые помещают атрибуты аннотации данных, когда вы не контролируете исходный класс, то есть не можете его редактировать.Типичная ситуация, когда класс генерируется с помощью ORM, такого как Entity Framework.

//Can't edit this class
public partial class YourClass{
  public string SomeField {get; set;}
}

//Add a partial class
[MetadataType(typeof(YourClassMetadata))]
public partial class YourClass{
}

//And a metadata class    
public class YourClassMetadata
{  
  [Required(ErrorMessage = "Some Field is required")]
  public string SomeField {get; set;}
}

Вы уверены, что имеете [MetadataType(typeof(YourClassMetadata))]?

Подробнее о классах друзей здесь и здесь

0 голосов
/ 18 июня 2013

Вы также можете использовать класс друзей, когда невозможно добавить метаданные в класс сущностей, например, когда модель автоматически генерируется контрактом данных WCF.

0 голосов
/ 11 ноября 2011

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

Следовательно, ваш исходный (автоматически сгенерированный) класс будет определен как частичный класс:

public partial class Customer
{
    public string Priority { get; set; }
}

А затем вы сгенерируете свои классы друзей, чтобы добавить метаданные.

[MetadataType(typeof(CustomerMetaData))]
public partial class Customer
{
}

internal class CustomerMetaData
{
    [Required]
    public string Priority { get; set; }
}

Затем вы передадите класс Customer в представление, в котором будет установлен приоритет.

В вашем случае я не уверен, что у вас есть только один частичный класс или два (другой не показан, но укажите, если таковой имеется). Мне интересно узнать, как вы получаете информацию о приоритете от клиента, и мне интересно, если это связано с тем, как вы используете ModelState.IsValid? Причина, по которой я спрашиваю, состоит в том, что в свойстве Priority не объявлено установленное средство доступа, поэтому мне интересно, как это устанавливается из представления, чтобы сообщить, что оно недопустимо?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...