在Razor循环中包含变量

时间:2012-09-18 13:31:30

标签: asp.net razor webmatrix

我正在使用这样的简单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的剃刀语法,所以我现在只是猜测。

干杯, 千电子伏

2 个答案:

答案 0 :(得分: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视图中完成。

答案 1 :(得分: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 HTML帮助程序方法来获取路径。