C# MVC3 ViewBag,在foreach语句中如何使用列表属性?

4
public class RegisterSubscription
{
        public string ID { get; set; }
        public string Description { get; set; }
        public int SubscrSelected { get; set; }
        public string Image { get; set; }
        public string InfoUrl { get; set; }
}

private List<RegisterSubscription> activePlans = new List<RegisterSubscription>();

在我的控制器中,我有这样的代码:ViewBag.ActivePlans = activePlans;,并且 ViewBag 填充了正确的数据。现在在我的视图中,我有以下代码:
@foreach (var item in ViewBag.ActivePlans)
{
    <li class="popupmenu" id="service_@(item.ID)" >
    <div>
    @Html.Image(item.Image, new { style="border-style:none; text-align:left; vertical-align:middle; width:64px; height:64px" })
    </div>
    </li>
}

但是我遇到了以下错误: “System.Web.Mvc.HtmlHelper”没有适用的方法名为“Image”,但似乎有一个同名的扩展方法。扩展方法无法动态调度。请考虑对动态参数进行转换或不使用扩展方法语法调用扩展方法。 非常感谢您的帮助,提前致谢。
1个回答

11

警告:我没有做过任何MVC的东西,所以这只是猜测。

我的猜测是ActivePlans在某种形式上是动态的... 因此你基本上需要让item强类型化。这可能很简单,就像这样:

@foreach (RegisterSubscription item in ViewBag.ActivePlans)

这将基本上把每个项目在从ViewBag中获取时转换为RegisterSubscription。在那之后,我看不到您有任何动态的东西,因此扩展方法应该没问题。我想。也许。当风向正确时。


@Jon Skeet - 如果我正在使用匿名类型,该怎么办?例如:ViewBag.ActivePlans = new { Prop = "Value" }。如果无法强制转换对象,我如何从视图中访问 ActivePlans.Prop?是否有可能实现? - one.beat.consumer
@one.beat.consumer:说实话,我不知道。 - Jon Skeet
@JonSkeet 谢谢您的快速回复。我猜我不能这样做。我已经创建了一个快速视图模型,但是本来想避免这种情况。 - one.beat.consumer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接