.net Razor替代PHP回声

时间:2012-10-04 16:49:24

标签: asp.net-mvc razor

我是.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 个答案:

答案 0 :(得分:8)

MVC cshtml中的 gerenal 等效的echo可能是:     @Html.Raw("SomeStringDirectlyInsideTheBrowserPageHTMLCode")

这会将(动态)字符串呈现在&#39;&lt;&#39;和&#39;&gt;&#39;无需进行HTML编码。例如,@Html.Raw(String.Format("<div class=\"{0}\" style=\"{1}\">", myclass, mystyle))工作正常。

请注意,编译器无法检查@Html.Raw(MyString)呈现的HTML标记。我的意思是:@ Html.Raw(&#34;&lt; div ....&gt;&#34;)不能仅仅通过&lt; / div&gt;来关闭因为你会收到一个错误(编译器没有检测到&lt; div ....&gt;)所以你必须用@ Html.Raw关闭标签(&#34;&lt; / div&gt;&#34;)< / p>

P.S。在某些情况下,这不起作用(例如在DevExpress中失败) - 改为使用ViewContext.Writer.Write()ViewContext.Writer.WriteLine()

答案 1 :(得分:3)

使用此:

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

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

答案 2 :(得分:2)

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

var data = [
@for (int i = 0; i < 50; ++i)
{
    @:[@i,@Math.Sin(i)]
    @(i != 49 ? "," : "")
}
];

答案 3 :(得分: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]]

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