Nullable < > как модель для просмотра страницы
-
06-07-2019 - |
Вопрос
Каковы возможные причины, по которым Nullable < > типы запрещены для передачи в качестве параметра TModel System.Web.Mvc.ViewPage < TModel > общий? Иногда это может быть удобно.
В ASP.NET MVC источник определил, какой TModel должен быть классом:
public class ViewPage<TModel> : ViewPage where TModel : class
но обнуляемые типы являются типами значений. Может быть, определение может быть менее ограничительным ...
Решение
Сейчас это не имеет смысла работать, так как ViewPage < T > внутренне всегда проверяет, что модель является экземпляром T. Вы никогда не сможете передать значение null из-за этой проверки.
Что касается того, почему типы структур не были разрешены в первую очередь, было множество причин. Среди них: (а) это может побудить людей использовать нестандартные типы структуры для модели, что почти никогда не бывает правильным; (б) вы не можете передать тип структуры в качестве параметра в Controller.UpdateModel (); (c) модели должны иметь эталонное равенство, чтобы фильтры могли их проверять и модифицировать; (d) встроенные типы структур, такие как int и т. д., обычно сами по себе не используются в качестве объекта модели; и (e) типы структуры не поддерживают наследование, например, передача int-модели в ViewPage < long > взорвется.
Оказывается, что (c), вероятно, не является проблемой, потому что типы структур должны быть неизменными, но другие элементы требуют, чтобы разрешающие типы структур были достаточно продуманы и продуманы, прежде чем их поддерживать. Последствия их поддержки намного больше, чем просто снятие ограничения на ViewPage < T >.
Другие советы
Одно значение на самом деле не является "моделью" - вы могли бы просто использовать словарь и привести?