在我的ASP.Net MVC应用程序中,我有一个循环,我希望使用HTML.DisplayFor方法在HTML中显示不同的属性值。但它不接受字符串值来指向Model参数。
普通模式:
<img src="@Html.DisplayFor(model => model.Image_1)" />
我的循环:
@for (int i = 1; i < 11; i++)
{
string currentImage = "Model.Image_" + i;
if ((@Html.DisplayFor(model => "Model.Image_" + i ).ToString()) != "")
{
<div>
<img src="@Html.DisplayFor(model => currentImage)" />
</div>
}
}
img src
中的结果只是currentImage
。
我希望它是Model.Image_" + i
。
我该怎么做?
如果你有更好的方法,这也是值得赞赏的。 我认为我的图像是否有自己的Model -class?
答案 0 :(得分:1)
您可以使用reflection这样动态获取属性的值。
@for (int i = 1; i < 11; i++)
{
string imagePropName= "Image_" + i;
string imageSrc = Model.GetType().GetProperty(imagePropName).GetValue(Model) as string;
if (!string.IsNullOrEmpty(imageSrc))
{
<div>
<img src="@Url.Content(imageSrc)" />
</div>
}
}
另一种选择是写<img src="@Url.Content(Model.Image_1)
,<img src="@Url.Content(Model.Image_2) />
10次。我的意思是,如果你创建了10个属性,那么也可能与实现一致。
但正如斯蒂芬所说,只需获得List
个ImagePaths并在View
中循环显示它们。如果要求更改为显示20个图像,则您必须再添加10个属性。