Переопределите ValidationAttributes на производном ViewModel - PullRequest
3 голосов
/ 01 ноября 2011

У меня есть экземпляр в приложении MVC2, где единственное различие между двумя представлениями - это немного другая проверка проверки диапазона в одном и том же поле.В попытке сохранить приложение как можно более сухим, мне интересно, можно ли как-то переопределить атрибут проверки.

Я попытался получить производную ViewModel, которая переопределяет свойство и реализует проверку диапазонаиначе как так:

public class Base
{
    [Range(1, 100)]
    public virtual int SomeProperty { get; set; }
}

public class Derived : Base
{
    [Range(2, 100)]
    public override int SomeProperty { get; set; }
}

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

Я знаю, что естьлиния мысли, которая говорит, что я должен иметь совершенно другую ViewModel и никогда не наследовать, но это просто так неправильно.Я бы дублировал View, ViewModel и логику, чтобы заполнить его.

1 Ответ

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

Кажется, это известная проблема: https://connect.microsoft.com/VisualStudio/feedback/details/483001/in-asp-net-mvc-generic-try-updatemodel-methods-ignore-subtype-properties

Спасибо за сообщение об этой проблеме.Это продуманное проектное решение с функцией привязки модели ASP.NET MVC.Чтобы переопределить используемый тип, вы можете указать явный тип при вызове UpdateModel и TryUpdateModel: UpdateModel (model);Когда вы пропускаете тип, компилятор будет использовать свою логику вывода типа, чтобы угадать тип, который вы имели в виду.В этом случае он делает неверное предположение.

(Не проверяя себя) Я предлагаю попытаться ввести cast в подтип во время связывания и посмотреть, не заставит ли это распознать атрибут.

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