我想创建一个包含其他视图的视图。我以前从未使用过json。我该怎么办?如何在视图中格式化json数据?
我的第一个功能“ Details”是从数据库中检索对象并返回视图“ Details.cshtml”。我要在此视图中生成局部视图(“ Stats.cshtml”)。现在,我想使用Stats函数中的json格式下载的数据生成局部视图。
控制器
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”功能时,我得到了视图没有json值的“详细信息”和“统计信息”。
答案 0 :(得分:0)
要渲染部分图片,您可以通过代码选择许多方法
最简单的方法是:将统计信息代码移至“详细信息”操作
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.
由于删除了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);
}
在您的视图中添加以下代码-Stats.cshtml:
@model YourViewModel
然后在Details.cshtml中:
@Html.Action("Stats")
请注意, Html.Action
无法调用async
操作,请小心使用。
下一个解决方案是使用新功能ViewComponent,这是详细信息: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-2.1
最后一个不是您所期望的:使用AJAX在页面上加载此部分页面,详细信息已加载到客户端