Проверка на стороне клиента MVC3 с Entity Framework, сгенерированной БД - PullRequest
0 голосов
/ 08 февраля 2012

В своем приложении я использовал Entity Framework, сгенерированный из БД с генерацией dbcontext ado.net.

Клиентская сторона хорошо работает, когда есть not null fk, но для строки полей a varchar/nvarchar not null mvcvalidator , похоже, просто не распознает, что поле должно быть "обязательным" .

Есть идеи, почему это происходит?

1 Ответ

4 голосов
/ 08 февраля 2012

Нет, Mvc Validator не будет читать метаданные вашей базы данных и выполнять проверку клиента.

Обычно вы создаете ViewModel / DTO и размещаете там проверки. Как и в случае с продуктом, посмотрите, как у полей есть атрибуты, они взяты из пространства имен System.ComponentModel.DataAnnotations и используются для украшения ваших моделей с помощью ограничений проверки.

 public class Product
 {
        public int Id { get; set; }

        [Required]
        [StringLength(10)]
        public string Name { get; set; }

        [Required]
        public string Description { get; set; }

        [DisplayName("Price")]
        [Required]
        [RegularExpression(@"^\$?\d+(\.(\d{2}))?$")]
        public decimal UnitPrice { get; set; }
    }

Смотрите полный пример здесь: http://www.asp.net/mvc/tutorials/older-versions/models-(data)/validation-with-the-data-annotation-validators-cs

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

Если вы не хотите создавать отдельные классы и настаиваете на использовании Entities из EntityFramework, вы можете создать класс друзей.

См. Эту статью: http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

Прокрутите вниз до => Но что, если мы используем графический инструмент для наших отображений ORM?

Существует Person, и он связан с классом Validator с помощью tge MetadataTypeAttribute

Что-то вроде:

[MetadataType(typeof(PersonMetaData))]
public partial class Person
{
}
public class PersonMetaData
{
    [Required(ErrorMessage = "Name is required.")]
    public object Name;
}
...