发布
社区首页 >问答首页 >JSON -将ASP.NET对象返回到视图和“格式为表”

JSON -将ASP.NET对象返回到视图和“格式为表”
EN

Stack Overflow用户
提问于 2019-09-28 17:19:44
回答 1查看 2.9K关注 0票数 0

我有一个由另一个开发人员开发的视图,其中已经有javascript的代码,它应该将JSON对象和格式作为HTML表来处理。

我是MVC的新手,我从Controller创建了一个包含我所需内容的JSON对象。问题是,在我的Controller中,如果我只返回JSON对象,那么浏览器就会向客户机显示原始的JSON字符串。当我返回一个JSON对象时,浏览器只显示JSON,而实际上没有调用我的视图,该视图具有处理JSON的代码,并使其对用户友好。

这是我的控制器:

代码语言:javascript
代码运行次数:0
复制
        public JsonResult GetPlayerNameByID(int playerID)
        {
            var player = GetPlayerByID(playerID);

            return Json(player, JsonRequestBehavior.AllowGet);
        }

这被称为通过下拉列表的点击事件。该页面的视图如下:

代码语言:javascript
代码运行次数:0
复制
@model FirstApp.Models.PlayerViewModel

<div id="container" class="container">
    <table class="table player">
        <thead>
            <tr>
                <th class="Name">Name</th>
                <th class="Overall">Overall</th>
            </tr>
        </thead>
        <tbody id="tableBody"></tbody>
    </table>

我相信我的问题是控制器不会返回到该视图,而只是一个原始的JSON对象。关于如何返回该视图的任何建议(这是发出调用的视图)。

EN

回答 1

Stack Overflow用户

发布于 2019-09-28 17:25:18

为了返回视图,您需要返回一个视图。类似于:

代码语言:javascript
代码运行次数:0
复制
return View();

或者,如果它需要包括一个模型:

代码语言:javascript
代码运行次数:0
复制
return View(someModel);

但是控制器操作只是返回JSON数据:

代码语言:javascript
代码运行次数:0
复制
return Json(player, JsonRequestBehavior.AllowGet);

你不能两样都还。听起来你有两个选择:

  1. 返回一个以player对象为模型的视图。在这种情况下,视图将直接呈现来自模型的数据,并且不需要JSON或任何与JavaScript有关的内容。(嗯,可能会有,取决于你的观点和你需要做什么。
  2. 有两个控制器操作。一个返回视图,另一个返回JSON数据。客户端JavaScript代码将向第二个操作发出AJAX请求,以获取JSON数据.

你选择哪一个真的取决于你。但是最终您不能从相同的操作返回视图和原始JSON。

为了给出第二个选项的例子,您将有两个操作:

代码语言:javascript
代码运行次数:0
复制
public ViewResult Player(int playerID)
{
    return View(playerID);
}

public JsonResult GetPlayerNameByID(int playerID)
{
    var player = GetPlayerByID(playerID);

    return Json(player, JsonRequestBehavior.AllowGet);
}

第一个方法将返回您的Player视图(当然,假设您有一个视图),模型中只有一个整数。因此,视图将从该模型类型的声明开始:

代码语言:javascript
代码运行次数:0
复制
@model int

这意味着,在视图代码中,您可以访问变量playerID中的Model。因此,在视图的JavaScript代码中,您可以将其捕获到一个变量中:

代码语言:javascript
代码运行次数:0
复制
let playerID = @Model;

例如,如果playerID值为123,则将客户端呈现为:

代码语言:javascript
代码运行次数:0
复制
let playerID = 123;

从这里开始,您将使用AJAX向@Url.Action("GetPlayerNameByID")发出请求以获取JSON数据。如何做到这一点将取决于您正在使用的JavaScript框架/库(如果有的话),并且有许多在线示例可以用于如何在各种框架和ASP.NET中使用AJAX。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58148659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档