2017-09-07 31 views
0

私のASP.Net MVCアプリケーションでは、HTML.DisplayForメソッドを使用してHTMLで異なるプロパティ値を表示したいループがあります。しかし、それはModelパラメーターに指示する文字列値を受け入れません。文字列を使用したHTML.DisplayForメソッド

ノーマルモード:

<img src="@Html.DisplayFor(model => model.Image_1)" /> 

マイループ:img src

@for (int i = 1; i < 11; i++) 
    { 
     string currentImage = "Model.Image_" + i; 
     if ((@Html.DisplayFor(model => "Model.Image_" + i).ToString()) != "") 
     { 
      <div> 
       <img src="@Html.DisplayFor(model => currentImage)" /> 
      </div> 
     } 

    } 

私の結果はちょうどcurrentImageです。 私はそれがModel.Image_" + iになりたいと思います。 どうすればいいですか?

これを行うにはより良い方法があれば、それも高く評価されます。 私のイメージには独自のモデルクラスが必要ですか?

+0

'if'ブロック(それは意味をなさない)を削除し、単に' string currentImage = "Image_" + i;を使用してください。 'しかし、これはすべて設計上の問題を示唆しています。画像パスを含む 'IEnumerable Images'プロパティを持つべきです –

+0

ifブロックは、プロパティが空(" ")ならHTMLを追加しません。あなたのアイデアをありがとう – Tigerhajen

+0

本当にあなたが 'Image_1'、' Image_2'などのプロパティを持っているなら、あなたは明らかに大きな設計上の欠陥があります。 –

答えて

1

プロパティの値は、reflectionを使用して動的に取得できます。

@for (int i = 1; i < 11; i++) 
{ 
    string imagePropName= "Image_" + i; 
    string imageSrc = Model.GetType().GetProperty(imagePropName).GetValue(Model) as string; 

    if (!string.IsNullOrEmpty(imageSrc)) 
    { 
     <div> 
      <img src="@Url.Content(imageSrc)" /> 
     </div> 
    } 
} 

もう一つの選択肢は<img src="@Url.Content(Model.Image_1)<img src="@Url.Content(Model.Image_2) /> 10回を書くことであろう。つまり、10個のプロパティを作成した場合、実装と一貫性があるかもしれません。

しかし、スティーブンが言ったように、ImagePathsのListを取得し、Viewでループさせてください。要件が20枚の画像に変更された場合は、さらに10個のプロパティを追加する必要があります。

+0

それは請求してくれてありがとう!解決済み+1 – Tigerhajen

関連する問題