Nullable<>ビューページのモデルとして
-
06-07-2019 - |
質問
Nullable<>の考えられる理由は何ですか?型は、System.Web.Mvc.ViewPage< TModel>のTModelパラメータとして渡すことはできません。ジェネリック?これは時々便利かもしれません。
ASP.NET MVCソースで、TModelがクラスにすべきものを定義しました:
public class ViewPage<TModel> : ViewPage where TModel : class
ただし、Nullable型は値型です。たぶん定義はより制限的ではないかもしれません...
解決
ViewPage&lt; T&gt;のように、これが現時点で機能することは意味がありません。内部的には、モデルがTのインスタンスであることを常に検証します。このチェックのため、nullを渡すことはできません。
構造タイプがそもそも許可されなかった理由については、多くの理由がありました。その中には:(a)モデルにカスタム構造タイプを使用することを奨励するかもしれませんが、これはほとんど正しいことではありません。 (b)Controller.UpdateModel()にパラメーターとして構造タイプを渡すことはできません。 (c)フィルタがそれらを検査および変更できるように、モデルには参照の平等性が必要です。 (d)intなどの組み込み構造型は、通常、それ自体ではモデルオブジェクトとして有用ではありません。 (e)構造型は継承をサポートしていません。 intモデルをViewPage&lt; long&gt;に渡す爆発します。
(c)構造型は不変である必要があるため、おそらく問題ではないことがわかりますが、他の項目では、構造型をサポートする前に、構造型に十分な思考と設計決定を与える必要があります。これらをサポートすることの結果は、ViewPage&lt; T&gt;の制約を削除するだけではありません。
他のヒント
単一の値は、実際には「モデル」ではありません。 -辞書を使用してキャストするだけですか?