asp.net - ASP.NET MVC - 将 JSON 对象返回到视图并“格式化为表格”
问题描述
我有一个由另一位开发人员开发的视图,其中已经有用于处理 JSON 对象和格式为 HTML 表的 javascript 代码。
我是 MVC 的新手,从控制器中,我创建了一个包含我需要的 JSON 对象。问题是从我的控制器中,如果我只返回 JSON 对象,那么浏览器只会向客户端显示原始 JSON 字符串。似乎当我返回一个 JSON 对象时,浏览器只显示 JSON,而没有实际调用我的视图,该视图具有处理 JSON 的代码并使其对用户友好。
这是我的控制器:
public JsonResult GetPlayerNameByID(int playerID)
{
var player = GetPlayerByID(playerID);
return Json(player, JsonRequestBehavior.AllowGet);
}
这被称为下拉列表的点击事件。该页面的视图如下所示:
@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 对象。关于如何返回该视图的任何建议(这是进行调用的视图)。
解决方案
为了返回一个视图,你需要返回一个视图。就像是:
return View();
或者,如果它需要包含一个模型:
return View(someModel);
但是您的控制器操作只是返回 JSON 数据:
return Json(player, JsonRequestBehavior.AllowGet);
你不能同时返回。所以听起来你有两个选择:
- 返回一个以
player
对象为模型的视图。在这种情况下,视图将直接呈现模型中的数据,并且不需要 JSON 或任何 JavaScript 参与。(嗯,可能有,这取决于您的视图是什么以及您需要做什么。但它不会在控制器级别。) - 有两个控制器动作。一个返回视图,另一个返回 JSON 数据。客户端 JavaScript 代码将向第二个操作发出 AJAX 请求以获取 JSON 数据。
你选择哪一个真的取决于你。但最终你不能从同一个操作中返回视图和原始 JSON。
举第二个选项的示例,您将有两个操作:
public ViewResult Player(int playerID)
{
return View(playerID);
}
public JsonResult GetPlayerNameByID(int playerID)
{
var player = GetPlayerByID(playerID);
return Json(player, JsonRequestBehavior.AllowGet);
}
第一种方法将返回您的Player
视图(假设您当然有一个),只有一个整数作为模型。因此视图将从该模型类型的声明开始:
@model int
这意味着在视图代码中,您将能够访问playerID
变量中的Model
。因此,在视图的 JavaScript 代码中,您可以将其捕获到变量中:
let playerID = @Model;
其中,例如,如果playerID
值为123
,这会将客户端呈现为:
let playerID = 123;
从那里您将使用 AJAX 发出请求以@Url.Action("GetPlayerNameByID")
获取 JSON 数据。如何执行此操作取决于您使用的 JavaScript 框架/库(如果有的话),网上有许多示例可用于说明如何在各种框架和 ASP.NET 中使用 AJAX。
推荐阅读
- python - 如何提取纸浆中的CBC经过时间?
- mod-wsgi - 使用 pyenv 的 mod_wsgi 共享库超过 1MB
- python - 如何在python中使用tika解析器提取每页超过2000个字符的pdf页面?
- elm - 使用多个构造函数更新 Elm 记录
- javascript - LeetCode 768:为 Max Chunks 构建一个解决方案的变体以进行排序
- python-imaging-library - 重现 AttnGAN 时 utils.py 出现一些问题
- oauth-2.0 - 允许用户使用 Google 帐户登录我的网站,无需 3d 方 cookie
- docker - 如何让 HWI OAuth Bundle 在反向代理后面的容器化应用程序中表现良好?
- python - 如何使用 Matplotlib 绘制分布式点图?
- nestjs - 反射注入器,允许在nestjs中注入构造函数参数之外的依赖项