c# - 将 json 返回到核心 2 中的部分 View

标签 c# asp.net json asp.net-mvc asp.net-core-2.0

我想创建一个包含不同 View 的 View 。我以前从未使用过 json。我该怎么做以及如何格式化 View 中的 json 数据?

我的第一个函数“Details”是从数据库中检索一个对象并返回 View “Details.cshtml”。在此 View 中,我想生成一个局部 View (“Stats.cshtml”)。现在我想生成一个局部 View ,其中包含在 Stats 函数中以 json 格式下载的数据。

Controller

public IActionResult Details(int? id = 1)
{
  var person = _context.Persons.Find(id);

  return View(champion);
}

public IActionResult Stats()
{
  var json = new WebClient().DownloadString("url");

  return Json(s);
}

查看 - Details.cshtml

@model Person

<div class=row">
  <div class="col-sm-5"> @Model.Name </div>
  <div class="col-sm-5"> @Html.Partial("Stats") </div>
</div>

查看 - Stats.cshtml

<h2>Stats</h2>
<div> here I want to put in a json field </div>

当我从地址 localhost/Home/Stats 运行“Stats”函数时,我得到了 json 格式的结果,但是当我运行“Details”函数时,我得到了 View 没有 json 值的“详细信息”和“统计信息”。

最佳答案

要渲染局部,你有很多选择,通过你的代码,

  1. 最简单的方法是:将您的 Stats 代码移动到 Details 操作

    public ActionResult Details()
    {
        ...//prepare your person viewModel
    
        var result = new WebClient().DownloadString("url");
        var stats = JsonConvert.DeserializeObject<YourViewModel>(result);
    
        //you have 2 options to return data
        yourPersonModel.Stats=stats ; //<== you have to change PersonViewModel
        //or ViewBag.Stats=stats; 
    
        return View(yourPersonModel);
    }
    

然后在 Details.cshtml 中:

@Html.Partial("Stats", ViewBag.Stats or Model.Stats)//by your choice before.
  1. 由于 Html.Action 被移除,但 ViewComponent 包含在 Core 中,您现在不能直接调用它,但此链接将告诉您如何恢复它:@Html.Action in Asp.Net Core

    public ActionResult Stats()
    {
        var result = new WebClient().DownloadString("url");
        var yourViewModel = JsonConvert.DeserializeObject<YourViewModel>(result);
        return PartialView(yourViewModel);
    }
    

在您的 View 中添加以下代码 - Stats.cshtml:

@model YourViewModel

然后在 Details.cshtml 中:

@Html.Action("Stats")

请注意,Html.Action 不能调用async 操作,请谨慎使用。

  1. 下一个解决方案是使用新功能 ViewComponent,详情如下: https://learn.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-2.1

  2. 最后一个不会是你所期望的:使用 AJAX 加载此部分页面在页面详细信息加载到客户端

关于c# - 将 json 返回到核心 2 中的部分 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51426881/

相关文章:

javascript - 如何使用 JSON 字符串化数据附加下拉列表

c# - 如果没有可空 DateTime 的隐式运算符,为什么 C# 隐式转换为可空 DateTime?

asp.net - Asp.Net RequireFieldValidator 和 Javascript 所见即所得的问题

c# - 上传文件时插入数据库

asp.net - 如何在 Visual Studio 2010 SP1 中打开 MVC 3 项目?

json - 如何使用 json 自动生成 rake 迁移文件

c# - 如何使用反射在 C# 中正确迭代应用程序设置

c# - 在 asp.net mvc 中的 javascript block 中获取特殊字符时进行转换

c# - 基于项目属性的网格背景颜色

json - 如何从示例JSON生成Swagger #definition