【问题标题】:HTML.DisplayFor method using string使用字符串的 HTML.DisplayFor 方法
【发布时间】:2018-02-16 01:59:33
【问题描述】:

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

【问题讨论】:

  • 删除if 块(这没有意义)并只使用string currentImage = "Image_" + i; &lt;img src="@Html.Display(currentImage)" /&gt; 但这一切都表明存在设计问题。您应该有一个包含图像路径的 IEnumerable&lt;string&gt; Images 属性
  • 如果属性为空 ( "" ),if 块将不添加 HTML。谢谢你的想法
  • 如果你真的有属性Image_1Image_2等,你显然有一个重大的设计缺陷

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


【解决方案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>
    }
}

另一种选择是写&lt;img src="@Url.Content(Model.Image_1)&lt;img src="@Url.Content(Model.Image_2) /&gt; 10 次。我的意思是如果你已经创建了 10 个属性,还不如与实现保持一致。

但正如斯蒂芬所说,只需获取 ImagePaths 的 List 并在您的 View 中循环遍历它们。如果要求更改为显示 20 张图片,则必须再添加 10 个属性。

【讨论】:

  • 谢谢你,这很聪明!解决了,+1
猜你喜欢
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 2018-08-10
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2014-03-03
相关资源
最近更新 更多