我是.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回声。
感谢。
答案 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]]
作为奖励,您可以获得正确的内容类型。