ASP.NET MVC. Почему ModelState.IsValid возвращает значение true после того, как я установил ModelMetadata.IsRequired программно? - PullRequest
0 голосов
/ 23 февраля 2011

У меня есть метод расширения, который я вызываю из моего EditorTemplate (для строки), который устанавливает метку и необходимые метаданные на элементе управления.(Я не могу комментировать свои модели, поэтому я и делаю это)= true ?

Ответы [ 2 ]

3 голосов
/ 23 февраля 2011

Проблема в том, что вы изменяете ModelMetadata в запросе get на странице. Эта информация не сохраняется, когда вы post выполняете свои действия (поскольку в MVC нет механизма ViewState esque).

Помечен ли класс, который вы пытаетесь проверить, как partial? Если это так, вы можете использовать классный атрибут MetadataType, чтобы украсить класс атрибутами проверки:

[MetadataType(typeof(JobOpening_Validation))]
public partial class JobOpening
{
     //JobOpening is generated by LinqToSql but I want to validate the Title Property
}

internal class JobOpening_Validation
{
    [Required]
    [StringLength(150, ErrorMessage = "Must be under 150 characters")]
    public string Title { get; set; }
}

Используя этот класс «throwaway» (JobOpening_Validation), мы создаем те же свойства, которые мы хотим проверить в классе «target» (JobOpening). Любое украшение атрибутов класса «throwaway» будет скопировано в класс «target».

Если это не работает для вас, вы можете создать FilterAttribute и переопределить метод OnActionExecuting и выполнить там проверку вашей модели. Вы также сможете соответственно обновить состояние модели.

0 голосов
/ 09 марта 2011

После экспериментов с использованием MvcExtensions - и неудачи, потому что это было слишком сложно вставить в мой проект. Я закончил находить блестящий маленький проект под названием Свободная проверка

Он прост в использовании и легко интегрируется с MVC.

...