使用字符串的HTML.DisplayFor方法

时间:2017-09-07 10:52:23

标签: asp.net asp.net-mvc displayfor

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

1 个答案:

答案 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个属性。