1

データベースに保存されている画像のテーブルを出力するために、次のような単純な for ループを使用しています。

@for(var i = 1; i < 7; i++){
<tr>
<td>Image @i:</td>
<td><img src="images/@image01" /></td>
</tr>
}

私がやりたいことは、画像フィールド名にも i 変数を使用することです。これは、上記の例では、明らかに各画像が同じで、image01 フィールドに由来するためです。以下を試しましたが、うまくいきません。これをコーディングする正しい方法を知っている人はいますか?

@for(var i = 1; i < 7; i++){
<tr>
<td>Image @i:</td>
<td><img src="images/@image0@i" /></td>
</tr>
}

私はさまざまなことを試しましたが、ASP Classic からのカミソリ構文を学んでいるので、現時点では推測しています。

乾杯、 ケブ

4

2 に答える 2

0

image01 がフィールドの場合、変数名を動的に作成することはできません。次のことを行う必要があります。

@for(var i = 1; i < 7; i++){
string imgName;
if (i == 0)
   imgName = image01; //store the var in a central variable
else if (i == 1)
   imgName = image02;
else if ...

<tr>
<td>Image @i:</td>
<td><img src="images/@imgName" /></td>
</tr>
}

他の唯一のオプションはリフレクションですが、Razor ビューでそれがどのように行われるかはわかりません。

于 2012-09-18T13:34:24.477 に答える
0

露骨な表現を使う

<img src="images/image0@(i)" />

これにより、次のような出力が得られます

<img src="images/image01">
<img src="images/image02">
<img src="images/image03">

理想的には、このような for ループを使用したり、ビューで画像の URL 値を作成したりすることは避けます。代わりに、ViewModel に画像のコレクションを作成します。

public class UserProfile
{
  public string Name { set;get;}
  public List<UserImage> Images {set;get;}
  public UserProfile()
  {
     Images=new List<UserImage>();
  }
}
public class UserImage
{
  public string URL { set;get;}
  public string Caption { set;get;}
}

このViewModelをImagesコレクションで私のビューに返します

public ActionResult ShowUser(int id)
{
  var user=new UserProfile();
  user.Name="SomeName";
  //to do : get images from db and set instead of being hard coded
  user.Images.Add(new UserImage { URL="someImge1.jpg"});
  user.Images.Add(new UserImage { URL="someImge2.jpg"});
  return View(user);
}

強く型付けされたビューでは、次のように表示します。

@model UserProfile
<table>
foreach(var img in Model.Images)
{
  <tr>
    <td><img src=@img.URL" alt="@img.Caption" /></td>
  </tr>
}
</table>

ビューにコードを混在させていません。画像の URL の設定はコントローラーで行う必要があります。画像が Content フォルダーにある場合は、Url.ContentHTML ヘルパー メソッドを使用してパスを取得できます。

于 2012-09-18T13:36:09.233 に答える