asp.net mvc-在Razor C#中动态使用模型变量名
本文关键字:动态 模型 变量名 net mvc- Razor asp | 更新日期: 2023-09-27 17:57:54
我有一个模型,其中有四个变量,即:Image1
、Image2
、Image3
和Image4
我正在尝试使用for循环在视图中放置四个<img>
元素。这些元素的src
属性应该是src = "'Images'@Model.Image1"
、src = "'Images'@Model.Image2"
等等
那么,有没有一种方法可以在for循环中做到这一点?
我现在拥有的:
@for (int i = 1; i <= 4; i++)
{
<img src="'Images'@Model.ImagePath1" id="image@(i)" width="150px" height="100px" />
}
感谢:)
如果你不想更改Model类,那么在视图中你可以这样做:
@{
var images = new string[]
{
Model.Image1, Model.Image2, Model.Image3, Model.Image4,
};
}
然后在HTML:中
<div>
@foreach (var image in images)
{
<img src="'Images'@image" />
}
</div>
这里有多个选项。你可以:
我的第一选择是将它们保存在列表中
public class ViewVM
{
public List<string> ImageNames = new List<string>();
public ViewVM()
{
ImageNames.Add("image1.png");
ImageNames.Add("image2.png");
ImageNames.Add("image3.png");
ImageNames.Add("image4.png");
}
}
然后在您的视图中只需进行
@for (int i = 0; i < Model.ImageNames.Length; i++)
{
<img src="'Images'@imageName" id="image@(i)" width="150px" height="100px"/>
}
然而,如果你想避免使用列表,你可以将所有图像存储在一个数组中,如下所示:public string[] imageNames = { image1, image2, image3, image4 };
然后在你的视野中,以同样的方式循环它们。
我会首先为图像创建一个视图模型,如下所示:
public class ImageData {
public int ImageId {get;set;}
public string Url {get;set;}
public string Alt {get;set;}
}
然后我会为页面创建一个ViewModel,就像一样
public class PageData {
public PageData(){
Images = Images ?? new List<ImageData>();
}
// Some other other properties here if you want or need
public List<ImageData> Images {get;set;}
}
视图中:
foreach (var image in @Model.Images) {
<img src="'Images'@image.Url" id="@image.ImageId" width="150px" height="100px" />
}