包括剃刀循环
问题描述:
我用一个简单的for循环这样的输出存储在数据库中的图像的表变量:包括剃刀循环
@for(var i = 1; i < 7; i++){
<tr>
<td>Image @i:</td>
<td><img src="images/@image01" /></td>
</tr>
}
我想要做的就是用我的变量在像场名称,因为在上例中,显然每个图像都是相同的,来自image01字段。我尝试了以下,但它不起作用。有谁知道正确的方式来编码?
@for(var i = 1; i < 7; i++){
<tr>
<td>Image @i:</td>
<td><img src="images/@[email protected]" /></td>
</tr>
}
我已经尝试了各种各样的东西,但我只是学习来自ASP经典的剃刀语法,所以我只是猜测此刻。
干杯, 千电子伏
答
如果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的观点中,这是如何做到的。
答
使用明确表达
<img src="images/[email protected](i)" />
这会给你的输出像
<img src="images/image01">
<img src="images/image02">
<img src="images/image03">
理想情况下,我会尽量避免使用这样的循环,并在创建视图图像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;}
}
这个视图模型与图像采集
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 [email protected]" alt="@img.Caption" /></td>
</tr>
}
</table>
我们不在视图中混合任何代码。设置图像url应该在你的Controller中完成。如果图像位于Content文件夹中,则可以使用Url.Content
HTML帮助器方法获取路径。
谢谢布赖恩,但我得到以下错误:“@”在代码块的开头无效 –
我认为这可能是我必须去的方式。 –
@KevinUnderhill哪一行导致错误?我的语法可能有点偏离...不幸的是,除非使用列表或数组来存储名称或替代设计模式,否则没有好的变量名称生成功能。 –