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 タグは@Html.Raw(MyString)、コンパイラによってチェックできないことに注意してください。つまり、 @Html.Raw("<div ....>") は単に </div> で閉じることはできません。エラーが発生するためです (<div ....> はコンパイラによって検出されません)。 @Html.Raw("</div>") でタグを閉じる必要があります

PS
場合によっては、これが機能しない場合があります (たとえば、DevExpress 内で失敗する) -代わりにViewContext.Writer.Write()orを使用してください。ViewContext.Writer.WriteLine()

于 2014-06-10T00:30:34.600 に答える
5

これを使って:

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

コンマの場合String.Join()、配列を作成する場合に使用できます(String.Join Method

于 2012-10-04T17:02:47.700 に答える
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 に答える