2017-10-20 3 views
2

要件:cshtmlに渡されるモデルプロパティに基づいて剣道コントロールを生成する検索ウィジェットを開発すると仮定します。例えばコントローラからcshtmlに渡されるモデルプロパティに基づいて剣道UIコントロールを動的に生成するには

:モデルは、

public string Name {get; set;} 

として、次のプロパティが含まれている場合、それはコントロールとしてテキストボックスを生成する必要があり、またはプロパティが

public string DateOfBirth {get; set;} 

ある場合、それは日付ピッカーを生成する必要が。 私が達成できたのは、モデルを動的にcshtmlに渡して、cshtmlが疎結合するようにすることでした。私が直面している問題は、渡されているモデルは異なるデータ型のプロパティを持っていますが、cshtmlはすべてのプロパティのテキストボックスコントロールでのみ遺伝的に処理されるということです。モデル。

確認してください以下のコード: コントローラー:

[HttpGet] 
    public ActionResult About(AddressModel obj) 
    { 
       dynamic model = obj; 
       return this.View(model); 
    } 

CSHTML:

@inherits BaseRazorView<object> 
  
<h1>Search Criteria</h1> 
  
@for (int i = 0; i < Model.GetType().GetProperties().Count(); i++) 
{ 
    <div class="row col-md-5"> 
        @Html.EditorFor(model => model.GetType().GetProperties()[i].Name) 
    </div> 
    <br /> 
} 
+0

日付フィールドが文字列であればそれはどのようにフィールドの種類を異なるのでしょうか? – DontVoteMeDown

答えて

2

あなたはpropertyinfoによってプロパティのプロパティタイプを取得することができます 、おそらくタイプを区別するためにそれを使用あなたが使用する入力コントロールの

https://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.propertytype(v=vs.110).aspx例えば

@for (int i = 0; i < Model.GetType().GetProperties().Count(); i++) 
{ 
    if(Model.GetProperties[i].PropertyType.Name == "String"){ 
     // add an editor or a textbox 
    } 
    else if(Model.GetProperties[i].PropertyType.Name == "DateTime"){ 
     // add a datetime picker 
    } 
} 
関連する問題