2

首先,我不是 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)

4

2 回答 2

0

如果我理解这个问题,您的问题是 RAZOR 无法知道基于 Javascript 跳过哪些 C# 值。它不评估 JS,它只是生成它。

如果您的逻辑支持(并且应该),它认为您需要将条件带到服务器级别。

这意味着,if(selectiong=="a")不应该是JS if/else它应该是C# if/else

查看这个 SO question (Simple If/Else Razor Syntax)以获得基本实现。

于 2013-05-26T18:04:10.660 回答
0

感谢所有的指点。最后,我想出了一种在 C# 代码中动态生成“标签”数据并将其发送到我的 JS 的方法,该变量在配置选项中被评估为 @Html.Raw 并且工作正常。

于 2013-06-05T07:44:02.827 回答