我正在使用这样的简单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的剃刀语法,所以我现在只是猜测。
干杯, 千电子伏
答案 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帮助程序方法来获取路径。