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;}
}

并使用 Images 集合将此 ViewModel 返回到我的视图

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 回答