我正在做一个MVC应用程序,我需要将json对象从控制器传递到视图。
var dictionary = listLocation.ToDictionary(x => x.label, x => x.value);
return Json(new { values = listLocation}, JsonRequestBehavior.AllowGet);
上面的代码我在我的控制器中使用,现在当我部署视图页面时,它在我的浏览器中打开一个下载对话框,打开文件时它给了我json对象,因为我需要格式。
现在我想返回我的视图页面,也想访问视图页面中的json对象。我怎么能这样做。
答案 0 :(得分:58)
执行return Json(...)
时,您明确告诉MVC 不要使用视图,并提供序列化的JSON数据。您的浏览器会打开一个下载对话框,因为它不知道如何处理这些数据。
如果您想要返回一个视图,只需像往常那样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>
修改强>
这是一个更完整的样本。由于我没有足够的上下文,因此此示例将采用控制器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
匹配。
答案 1 :(得分:4)
您可以使用AJAX来调用此控制器操作。例如,如果您使用的是jQuery,则可以使用$.ajax()
方法:
<script type="text/javascript">
$.ajax({
url: '@Url.Action("NameOfYourAction")',
type: 'GET',
cache: false,
success: function(result) {
// you could use the result.values dictionary here
}
});
</script>
答案 2 :(得分:0)
<script type="text/javascript">
jQuery(function () {
var container = jQuery("\#content");
jQuery(container)
.kendoGrid({
selectable: "single row",
dataSource: new kendo.data.DataSource({
transport: {
read: {
url: "@Url.Action("GetMsgDetails", "OutMessage")" + "?msgId=" + msgId,
dataType: "json",
},
},
batch: true,
}),
editable: "popup",
columns: [
{ field: "Id", title: "Id", width: 250, hidden: true },
{ field: "Data", title: "Message Body", width: 100 },
{ field: "mobile", title: "Mobile Number", width: 100 },
]
});
});
答案 3 :(得分:-2)
$.ajax({
dataType: "json",
type: "POST",
url: "/Home/AutocompleteID",
data: data,
success: function (data) {
$('#search').html('');
$('#search').append(data[0].Scheme_Code);
$('#search').append(data[0].Scheme_Name);
}
});