首先,我不是 MVC 开发人员——我只是想帮助他们项目中的一些 MVC 人员,因为他们有各种限制,所以如果这是一个 n00b 的事情,请不要开枪 :)
事情是这样的 - 这个团队使用了一个框架,它具有如下渲染功能:
ObjMP.render ({
// various configuration options
labels: [
{ settings: '@Html.Raw(lablesPosition[0])', content: '@Html.Raw(lablesContent[0])' },
{ settings: '@Html.Raw(lablesPosition[1])', content: '@Html.Raw(lablesContent[1])' }
]
困扰我的配置选项是上面显示的“标签”选项。“lablesContent”和“lablesPosition”实际上是我的 .cshtml 文件中的 IList。
如您所见,上面的代码使用存储在索引 0 和 1 的集合中的设置。这实际上是一个硬编码的东西。
我不保证收藏中只有 2 件商品。
为了克服这个问题,我可以这样做:
1> 以某种方式编写一个 foreach 循环,而不是使用 lablesPosition[0] 等,我可以做类似 lablesPosition[i] 的事情
2> 我知道每个场景的集合中的记录数,因此根据场景选择,我使用 if-else 块编写 5 个设置或 4 个设置,如下所示:
if(selectiong=="a")
{
labels: [
{ settings: '@Html.Raw(lablesPosition[0])', content: '@Html.Raw(lablesContent[0])' },
{ settings: '@Html.Raw(lablesPosition[1])', content: '@Html.Raw(lablesContent[1])' }
]
}
else if(Select=="b")
{
labels: [
{ settings: '@Html.Raw(lablesPosition[0])', content: '@Html.Raw(lablesContent[0])' },
{ settings: '@Html.Raw(lablesPosition[1])', content: '@Html.Raw(lablesContent[1])' },
{ settings: '@Html.Raw(lablesPosition[2])', content: '@Html.Raw(lablesContent[2])' }
]
}
第二种方法的问题是,当呈现页面时,RAZOR 引擎似乎在运行时使用“@”评估所有表达式,而不管 JS 中的 if - else 条件验证,因此代码对我来说中断 - 基本上它可能会尝试当集合只有 2 个项目时,访问集合中位置 6 的值。
我怎么解决这个问题 ?(ASP.NET MVC 3)