0

在我的 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 类吗?

4

1 回答 1

1

您可以像这样使用反射动态获取属性的值。

@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 个属性,还不如与实现保持一致。

但正如斯蒂芬所说,只需获取一个ListImagePaths 并在您的View. 如果要求更改为显示 20 个图像,则您必须再添加 10 个属性。

于 2017-09-07T12:19:39.317 回答