4

ビューで、

@{
    Layout = "~/Views/Shared/site.cshtml";
    ViewBag.Title = "Organizations";

    var organizations = "";
    foreach (var org in Model)
    {
        organizations += "'" + org.Name + "':'" + org.Id + "',";
    }
    organizations = organizations.Substring(0, organizations.Length - 1);
}

結果の操作:organizations = "'Passport':'14f0eac0-43eb-4c5f-b9fe-a09d2848db80','Bank':'ad1d77d8-7eb1-4a4c-9173-b0f2f7269644'";

セクションJSコードでデータを出力します。しかし、ブラウザでページのソースコードを表示すると、必要なものが得られません。どうしたの?通常の見積もりを作成する方法は?

JS:"data": "@organizations"

ビューのWebページが返される結果"data": "'Passport':'14f0eac0-43eb-4c5f-b9fe-a09d2848db80','Bank':'ad1d77d8-7eb1-4a4c-9173-b0f2f7269644'"

4

4 に答える 4

2

OKクールQ、このソースを試してください:

@{
    var model = Model.ToArray().Select(org => string.Format("'{0}':'{1}'", org.Name, org.Id));
    var data = string.Join(",", model);
}

@Html.Raw(data)
于 2012-09-06T05:21:01.613 に答える
1

変更したらどうなりますか

"data": "@organizations"

"data": "@Html.Raw(organizations)"
于 2012-09-06T05:20:51.930 に答える
0

@Html.Raw(content)

そしてこれをチェックしてください:http://jeffreypalermo.com/blog/what-is-the-difference-in-lt-variable-gt-and-lt-variable-gt-in-asp-net-mvc/

于 2012-09-06T05:23:24.537 に答える
0

ここのコード例では、犯人は

@organizations

引用符を生成します。代わりに次を使用できます。

@Html.Raw(organizations)

さて、それは素晴らしいことですが、JSONを作成することで、フレームワークが実行できる作業を実行していることになります。フレームワークがシリアル化できるモデルが必要になる可能性があります。このように、ビューヘッダーにコードを含める必要はまったくありません。

@Html.Raw(JsonConvert.SerializeObject(Model.ToDictionary(m => m.Name, m => m.Id))))

上記では、私がJson.NETを使用していることに注意してください。これは、Microsoftがプロジェクトに移行しているため、おそらくプロジェクトにNuGETを使用する必要があります。古いJSONシリアライザーを使用してこれを行う方法を理解しても意味がありません。また、モデルを他の目的で使用している場合を除き、ビューの外部で辞書変換を実行して、ビューのコード作業を減らすこともできます。

次に、ビューにJSONを埋め込む場合は、他の2つのオプションのいずれかを検討することをお勧めします。データ量が少ない場合は、eli(こちら)が提案するjoinメソッドを使用することを検討してください。代わりに、HTML 5の「data-」要素でエンコードし、JavaScriptを使用してロードしてください。そうすれば、JavaScriptを表示しないようにすることができます。これは、動的に生成されたHTMLによって初期化される変数を探して、JavaScriptをデバッグするときに混乱するもう1つのステップです。

さらに良いことに、再利用可能なHTMLヘルパーメソッドを作成して、モデルをデータ属性に変換します。HTML-5データでダッシュを使用する方法-*ASP.NETMVCで属性

最後に、JSON要素が多数ある場合は、データを個別に送信することを検討してください。コントローラーで単純なJson()メソッドを使用してレンダリングし、クライアント側のコードで単純なjQuery $ .json()を使用して取得します。例についてはこちらをご覧ください

幸運を!

于 2012-09-06T05:26:18.510 に答える