使用Nancy的SSVE时如何在视图中访问Dictionary项?
在Nancy的SSVE视图中读取Dictionary数据的正确方法
嘿,我明白你现在卡在哪了——把Dictionary传给视图后,遍历只能看到键和对象类型的字符串,根本拿不到里面的属性值对吧?这是因为你没搞清楚@Current在遍历Dictionary时到底是什么东西。
先给你拆解清楚:当你把Dictionary<string, object>作为模型传给SSVE视图时,用@Each遍历的话,每一个@Current其实是KeyValuePair<string, object>类型的实例,不是字典本身。所以你直接输出@Current才会得到[model, ...RatPack]这种字符串表示。
下面给你两种解决方案,看你需求来选:
1. 直接访问Dictionary里的特定键值
如果你不需要遍历,只是想直接拿某个键对应的对象属性,不用绕弯子,直接通过@Model["键名"]来访问:
<!-- 直接获取指定键的对象并访问属性 --> Model的FirstName: @Model["model"].FirstName<br> Info的FirstName: @Model["info"].FirstName
2. 遍历整个Dictionary的键值对
如果你确实需要遍历所有键值对,那要利用KeyValuePair的Key和Value属性:
<!-- 遍历所有键值对,分别获取键和对象属性 --> @Each <p>键名: @Current.Key</p> <p>对应的FirstName: @Current.Value.FirstName</p> @EndEach
另外给你提个小建议:你的RatPack类里的FirstName是字段,虽然SSVE也能访问字段,但改成属性(加上get; set;)会更符合C#的编码规范,也能避免一些潜在的绑定问题:
public class RatPack { public string FirstName { get; set; } }
之前你试的@Current["info"]和@Current.info都不对,原因是:
@Current是键值对实例,不是字典,所以不能用索引器["info"]info是你Dictionary里的键名,不是KeyValuePair的属性,自然找不到这个成员
这样改完之后,你就能正常访问到字典里对象的属性啦!
内容的提问来源于stack exchange,提问作者Xpleria
相关产品推荐
相关产品推荐

