我有一个继承以下内容的视图:
@model MvcApplication.Models.Application
但是我需要知道是否可以像传递模型对象一样将 JSON 对象传递到我的视图? 因为我有以下控制器:
public ActionResult ListPackages()
{
using (var client = new WebClient())
{
var query = HttpUtility.ParseQueryString(string.Empty);
//code goes here ....
return Content(json, "application/json");
}
}
它使用 API 调用返回 JSON,然后我使用 JavaScript 在视图上显示 JSON,如下所示:
$.ajax({
url: $('#geturl').data('url'),
type: 'GET',
cache: false,
success: function (result) {
$.each(result.data, function (key, val) {
var str = val.packageName;
$('<li/>', { text: str })
.appendTo($('#products'));
});
}
使用 JavaScript 显示 JSON 的问题是,它会让我很难轻松地使用 JSON 对象,例如基于返回的 JSON 创建链接或创建包含 JSON 的表。所以我的问题是:是否可以将 JSON 对象而不是 Model 对象从我的控制器传递到我的视图?
你在这里谈论两件事:
创建视图:控制器将模型传递给服务器端的视图,使用 JSON 这样做没有多大意义,因为内存中的对象正在传递给视图引擎。
在客户端使用 JSON 数据:这里讨论的是客户端-服务器 Ajax 通信,您从客户端请求数据并获取从服务器返回的 JSON。这可以说与传递到视图的模型数据无关
现在是一个单独的项目。我对此有很好的经验,但还有其他插件。使用您对其语法最满意的一种。
这些模板应该放在哪里?不使用 JSON 的最佳解决方案
在这里你有什么收获?假设您的应用程序中有此功能:
如果你使用视图+JSON+模板,这意味着你必须维护
两个包列表的呈现:第一页视图中使用的一个和显示后续分页的模板。
那么是哪一个呢?
public ActionResult ListPackages()
{
using (var client = new WebClient())
{
var query = HttpUtility.ParseQueryString(string.Empty);
//code goes here ....
var model = new JavaScriptSerializer().Deserialize<MyViewModel>(json);
return View(model);
}
}
其中
MyViewModel
当然会反映您正在使用的 JSON 结构。