、およびシリアル化されたJSONデータを提供するために:あなたはjQueryのを使用している場合たとえば、あなたは$.ajax()
メソッドを使用する場合があります。このデータの処理方法がわからないため、ブラウザにダウンロードダイアログが表示されます。
あなたの代わりにビューを返すようにしたい場合は、単に通常どおりのようなreturn View(...)
ん:
var dictionary = listLocation.ToDictionary(x => x.label, x => x.value);
return View(new { Values = listLocation });
は、その後、あなたのビューでは、単にJSONとしてあなたのデータをエンコードし、JavaScript変数に代入:
<script>
var values = @Html.Raw(Json.Encode(Model.Values));
</script>
EDIT
もう少し完全なサンプルです。私はあなたから十分な文脈がないので、このサンプルはコントローラFoo
、アクションBar
、およびビューモデルFooBarModel
と仮定します。また、場所のリストは、ハードコードされています
コントローラ/ FooController.cs
public class FooController : Controller
{
public ActionResult Bar()
{
var locations = new[]
{
new SelectListItem { Value = "US", Text = "United States" },
new SelectListItem { Value = "CA", Text = "Canada" },
new SelectListItem { Value = "MX", Text = "Mexico" },
};
var model = new FooBarModel
{
Locations = locations,
};
return View(model);
}
}
モデル/ FooBarModel.cs
public class FooBarModel
{
public IEnumerable<SelectListItem> Locations { get; set; }
}
ビュー/フー/ Bar.cshtmlを
@model MyApp.Models.FooBarModel
<script>
var locations = @Html.Raw(Json.Encode(Model.Locations));
</script>
エラーメッセージが表示されるため、互換性のないタイプ(つまり、互換性のないタイプ)が混在しているようです。 Ported_LI.Models.Location
とMyApp.Models.Location
)ですので、コントローラのアクション側から送信されたタイプとビューから受信したタイプが一致していることを確認してください。特にこのサンプルの場合、コントローラー内のnew FooBarModel
は、ビュー内の@model MyApp.Models.FooBarModel
と一致します。
こんにちはダニエル、私は上記のコードを使用すると、私のビューのページで、次のエラーが発生しました。"辞書に渡されたモデル項目は、 '<> f__AnonymousType3'1 [System.Collections.Generic.List'1 [Ported_LI.Models.Location]]'型ですが、この辞書にはMyApp.Models型のモデル項目が必要です。ロケーション'"。 さらに手助けをしてください。 – Purushoth
まさに私が探していたものです。 Jsonのエンコーディングを行うのは奇妙なことです。私はコントローラーがこの機能を持っているはずだと思います。あなたの例は非常に便利です。 – IAbstract
@IAbstract本当に欲しかったら、コントローラに 'Json.Encode'を置くことができます。個人的には、私はそれをしません。なぜなら、(1)コントローラのロジックは単純なままなので、 (2)カノニカル表現はより柔軟性を提供します。たとえば、コレクションを反復処理したり、条件文を実行したりできます(つまり、if(Model.Locations.Any()){...}など)。あなたのコントローラでエンコードしている場合、あなたのビューは基本的に文字列で止まっています。 (3)コントローラーが本質的にプレゼンテーション上の懸案事項であるとは考えていません(JSONの必要性を示すのはJavaScriptです)。乾杯。 –