我有一个由另一个开发人员开发的视图,其中已经有javascript的代码,它应该将JSON对象和格式作为HTML表来处理。
我是MVC的新手,我从Controller创建了一个包含我所需内容的JSON对象。问题是,在我的Controller中,如果我只返回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对象。关于如何返回该视图的任何建议(这是发出调用的视图)。
发布于 2019-09-28 09:25:18
为了返回视图,您需要返回一个视图。类似于:
return View();
或者,如果它需要包括一个模型:
return View(someModel);
但是控制器操作只是返回JSON数据:
return Json(player, JsonRequestBehavior.AllowGet);
你不能两样都还。听起来你有两个选择:
player
对象为模型的视图。在这种情况下,视图将直接呈现来自模型的数据,并且不需要JSON或任何与JavaScript有关的内容。(嗯,可能会有,取决于你的观点和你需要做什么。。
你选择哪一个真的取决于你。但是最终您不能从相同的操作返回视图和原始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。
https://stackoverflow.com/questions/58148659
复制相似问题