質問

書きリスト`1エディターテンプレート用のEditorFor延長法(MVC2しいラインの課題の利用時のジェネリック医薬品+nullオブジェクト。

与えられモデル

class MyModel {
   public Foo SomeFoo { get;set; }
   public List<Foo> SomeFooList { get;set; }
 }

とにテンプレート/ビング/共有/EditorTemplates/ト1.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>

<%
    IEnumerable enumerableModel;
    if (Model != null && (enumerableModel = Model as IEnumerable) != null)
    {
        foreach (var v in enumerableModel)
        {
            var model = v;
            Response.Write(Html.EditorFor(m => model));
        }
    }
%>

思想されるエディタのためのSomeFoo、任意の要素のSomeFooListたはnullの場合、どのタイプModelMetaDataは"Foo".しかし、している場合は"null"としてのオブジェクトSomeFooListを取得しま何も描画されるモデルとしては"オブジェクトではなく、"Foo以上を総称してライフサイエンスマイリストの一般論争することができます。

基本的に私達のようなもの

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<T>> where T : class" %>

でんの種類の一覧です。

私も見に変更するModelMetaData.ModelType分野の場合はnullの場合(新しいオブジェクトを作成、読み取り専用)はその一つの手にhacksように避けなければなりません。

別の考えが呼び出しのEditorFor方法です。呼び出し及び通過typeof(T)入りがいを避けるこの種のコードが可能です。

意思い?

更新:

ることができるようにタイプ入モデルのメタデータを見ていたのは、少しややこしくなりに思います。って更新され自分のコードは以下のものがまだまだ積極的になれないのsolition:

if (Model != null && (enumerableModel = Model as IEnumerable) != null)
    {
        Type listType = null;

        if (enumerableModel.GetType().IsGenericType)
        {
            listType = enumerableModel.GetType().GetGenericArguments()[0];
        }

        foreach (var v in enumerableModel)
        {
            var model = v;
            if (model == null && listType != null)
                model = Activator.CreateInstance(listType);
            Response.Write(Html.EditorFor(m => model));
        }
    }

Amar

役に立ちましたか?

解決

かいと考えておくとよく似た構造 Nullable<T> にentity? Nullable<T> contrains Tとなる構造体がいをします。そのようにチェックできHasValue財産そこは、どのような事業をいとな問題をチェックnullがわからないタイプです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top