5

我是 .net MVC 和 Razor 引擎的新手,但我已经使用 PHP 很长时间了。我正在尝试在 Razor 中执行此 PHP 代码:

var data = [
<?php for ($i = 0; $i < 50; ++$i) { 
  echo '[' . $i . ',' . sin($i) . ']';
  if ($i != 49)
    echo ',';
?>
],

我设法使用它来做到这一点,但对于如此简单的事情来说,它看起来既糟糕又复杂

var data = [
  @for(int i = 0; i < 50; ++i) {  
<text>[</text>@i<text>,</text>@Math.Sin(i)<text>]</text>if (i != 49) {<text>,</text>}
  } 
];

问题是[],与 Razor 语法混淆并给出语法错误,所以我不得不将它们包装在<text>标签上。

有没有更简单/更好的方法来做到这一点?也许类似于 PHP 回声。

谢谢。

4

4 回答 4

10

MVC cshtml中的 echo 的一般等价物可能是: @Html.Raw("SomeStringDirectlyInsideTheBrowserPageHTMLCode")

这会将(动态)字符串呈现在其不需要 HTML 编码的 '<' 和 '>' 的位置。例如@Html.Raw(String.Format("<div class=\"{0}\" style=\"{1}\">", myclass, mystyle))工作正常。

请注意,@Html.Raw(MyString)编译器无法检查由 渲染的 HTML 标记。我的意思是:@Html.Raw("<div ....>") 不能仅仅被 </div> 关闭,因为你会得到一个错误(<div ....> 没有被编译器检测到)所以你必须用 @Html.Raw("</div>") 关闭标签

PS
在某些情况下这不起作用(例如它在 DevExpress 中失败) - 使用ViewContext.Writer.Write()orViewContext.Writer.WriteLine()代替。

于 2014-06-10T00:30:34.600 回答
5

用这个:

@String.Format("[{0},{1}]", i, Math.Sin(i))

String.Join()如果您创建数组(String.Join 方法) ,则可以使用逗号

于 2012-10-04T17:02:47.700 回答
2

我知道的老问题,但另一种方法是使用纯文本语法@:

var data = [
@for (int i = 0; i < 50; ++i)
{
    @:[@i,@Math.Sin(i)]
    @(i != 49 ? "," : "")
}
];
于 2014-10-15T15:36:22.040 回答
1

使用视图构造 JSON 对象并不是最好的方法。您可以使用原生 JSON 支持直接从控制器执行此操作,例如:

    public JsonResult SinArray()
    {
        return new JsonResult() { 
            Data = Enumerable.Range(0, 50).Select(i => new[] { i, Math.Sin(i) }), 
            JsonRequestBehavior = JsonRequestBehavior.AllowGet 
        };
    }

这返回

[[0,0],[1,0.8414709848078965],[2,0.90929742682568171],.....,[49,-0.95375265275947185]]

作为奖励,您可以获得正确的内容类型。

于 2012-10-04T17:09:38.487 回答