使用超级简单视图引擎迭代List而不使用模型

时间:2016-09-13 17:31:38

标签: c# .net-core nancy

我试图创建一个简单的示例,说明如何使用NancyFx的超级简单视图引擎迭代在.Net Core上运行时使用ViewBag发送到前端的字符串列表。但是当我将我的List附加到@Each语句时,它只是给出了一个错误。但是,在将其包装在自定义对象中后,我能够打印List。

public class ViewHolder
{
    public List<string> listOfThings { get; set; }
}
...
ViewHolder boxIt = new ViewHolder();
boxIt.listOfThings = someList;
ViewBag.viewPasser = boxIt;

然后在前端:

@Each.Context.ViewBag.viewPasser.listOfThings
    @Current
@EndEach

这实现了我想要的,但我不明白为什么@Each在没有包装类的情况下不会识别我的List。如果没有额外的拳击,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以通过将作为模型的集合传递给视图而不是使用viewbag来完成您要查找的内容。以下是如何执行此操作的示例:

    in module
    ...
    var items = new List();
    items.Add( "Item1" );
    items.Add( "Item2" );
    items.Add( "Item3" );
    return View["Index", items];


    in view
    ...
    @Each
        @Current
    @EndEach

我挖掘了NancyFx源代码并逐步完成了对您遇到的问题负责的文件。发生的事情是,在该代码中,Nancy正试图将ViewBag中的集合强制转换为IEnumerable并且失败了。看来,当你将集合直接放入ViewBag并且Nancy尝试进行强制转换时,该集合的类型不再是List而只是动态,因此强制转换失败并返回null,而Nancy返回[ERR!]。但是,如果将该列表放在类中并将该类的实例放在ViewBag中,则可以正确地协调该类型并执行强制转换。仍然没有超级有用,但希望更深入地了解为什么明显的差异。