当前位置: 首页 > 面试题库 >

如何从MVC控制器返回Json对象以查看

丁振海
2023-03-14
问题内容

我正在做一个MVC应用程序,我需要从控制器传递json对象才能查看。

var dictionary = listLocation.ToDictionary(x => x.label, x => x.value);
return Json(new { values = listLocation}, JsonRequestBehavior.AllowGet);

上面的代码是我在控制器中使用的,现在当我部署视图页面时,在浏览器中打开一个下载对话框,打开文件时,它会为我提供json对象作为我需要的格式。

现在我想返回我的视图页面,也想访问视图页面中的json对象。我怎样才能做到这一点。


问题答案:

在执行此操作时,return Json(...)您明确地告诉MVC 不要使用view
并提供序列化的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; }
}

视图/Foo/Bar.cshtml

@model MyApp.Models.FooBarModel

<script>
    var locations = @Html.Raw(Json.Encode(Model.Locations));
</script>

从错误消息的外观来看,似乎您正在混合使用不兼容的类型(例如Ported_LI.Models.Locatio‌​nMyApp.Models.Location),因此,概括地说,请确保从控制器操作端发送的类型与从视图接收的类型匹配。特别是对于此样本,new FooBarModel在控制器@model MyApp.Models.FooBarModel视图中进行匹配。



 类似资料:
  • 问题内容: 我必须从控制器返回员工列表以响应jQuery AJAX请求。我应该怎么做? 我的控制器: 相关视图中的AJAX代码: 提前致谢。 问题答案: 在spring,当你需要对象序列化,反序列化和消息转换时。在这种情况下,你需要使用和注释控制器处理程序方法。 哪里: @ResponseBody:将通知spring尝试转换其返回值并将其自动写入http响应。 @RequestBody:将通知sp

  • 问题内容: 我的MVC控制器中有一个简单的方法: 这是一个区域对象: 这就是我从视图中调用方法的方式: 我已经检查了控制器中的方法,并创建了Area对象的列表。您有什么主意,为什么从视图中调用该方法时为什么会出现500内部服务器错误?当我返回其他任何内容(例如Dictionary对象)时,一切正常,只是当我打算将Areas列表转换为Json时,我得到一个错误。 问题答案: 由于类包含和包含的集合,

  • 问题内容: 我有一个MVC 6项目,其中使用Fiddler来测试Web API。如果我采取以下控制器动作,该动作使用EntityFramework 7返回List。然后,HTML将呈现良好。 但是,当我尝试返回Json响应时,却收到502错误。 关于对象为何未正确序列化为json的任何想法? 问题答案: 首先,您可以使用或作为return类型来代替and return just 。我建议您阅读有关

  • 问题内容: 我们有一个MVC(MVC4)应用程序,该应用程序有时可能会收到一个从第三方发送到我们特定URL(“ http://server.com/events/ ”)的JSON事件。JSON事件位于HTTP POST的正文中,而正文则严格为JSON(-不是在某些字符串字段中带有JSON的表单发布)。 如何在控制器主体中接收JSON主体?我尝试了以下内容,但一无所获 [编辑] :当我说 什么都没得

  • 我得到这个错误消息: 无法写入JSON: 未找到用于java.io.FileDescriptor类的序列化程序,也未发现用于创建BeanSerializer的属性 (为了避免异常,禁用SerializationFeature.fail_on_empty_beans)) (通过引用链: org.springframework.core.io.filesystemResource[\“outputSt

  • 我的控制器代码: 但不管用。