Обнуляемый <> как TModel для ViewPage - PullRequest
1 голос
/ 18 июня 2009

Каковы возможные причины того, что типы Nullable <> запрещены для передачи в качестве параметра TModel System.Web.Mvc.ViewPage generic? Иногда это может быть удобно.

В ASP.NET MVC источник определил, какой TModel должен быть классом:

public class ViewPage<TModel> : ViewPage where TModel : class

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

Ответы [ 2 ]

3 голосов
/ 18 июня 2009

Это не имеет смысла для работы в данный момент, так как ViewPage внутренне всегда проверяет, что модель является экземпляром T. Вы никогда не сможете передать значение null из-за этой проверки.

Что касается того, почему типы структур не были разрешены в первую очередь, было множество причин. Среди них: (а) это может побудить людей использовать нестандартные типы структуры для модели, что почти никогда не бывает правильным; (б) вы не можете передать тип структуры в качестве параметра в Controller.UpdateModel (); (c) модели должны иметь эталонное равенство, чтобы фильтры могли их проверять и модифицировать; (d) встроенные типы структур, такие как int и т. д., обычно сами по себе не используются в качестве объекта модели; и (e) типы структуры не поддерживают наследование, например, передача int-модели в ViewPage взорвется.

Оказывается, что (c), вероятно, не является проблемой, потому что типы конструкций должны быть неизменными, но другие элементы требуют, чтобы разрешающие типы структур были достаточно продуманы и приняты конструктивные решения, прежде чем их поддерживать. Последствия их поддержки намного больше, чем просто снятие ограничения на ViewPage .

1 голос
/ 18 июня 2009

Одно значение на самом деле не "модель" - вы могли бы просто использовать словарь и привести?

...