ASP.. NET MVC -如何在javascript中执行条件c#代码

ASP.NET MVC - How to execute conditional C# Code in javascript

本文关键字:执行 条件 代码 javascript MVC NET ASP      更新时间:2023-09-26

首先,我不是一个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"answers"lablesPosition"实际上在我的。cshtml文件中列出。

如您所见,上面的代码使用了存储在索引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条件验证,因此代码对我来说中断-基本上它可能会尝试访问集合中位置6的值,当集合只有2个项目时。

我该如何解决这个问题?(ASP。. NET MVC 3)

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

它认为你需要把你的条件带到服务器层,如果你的逻辑支持(它应该)。

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

看一下这个SO问题(简单的If/Else Razor语法)的基本实现。

谢谢你的指点。最后,我想出了一种在c#代码中动态生成"标签"数据的方法,并将其发送到我的JS中的变量中,该变量被评估为@Html。