在视图模型中使用 MVC 视图返回 JsonResult 数据
Return JsonResult Data With MVC View in View Model
我目前使用Knockout在页面加载后动态加载数据。 我正在使用控制器方法,例如:
public JsonResult GetData(int paramId)
{
return Json(new { Field1: true });
}
然后这样称为(在JS中):
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: '/Dashboard/GetData',
data: JSON.stringify({ paramId: valId }),
dataType: "json",
error: function (xhr, ajaxOptions, thrownError) {
},
success: function (data) {
var val = data.Field1;
}
});
在这里,data
对象是一个已经 JS 可访问的对象。
当我想刷新单个项目时,这种方法很好,但它使初始加载效率相当低 - 需要进行许多调用来初始化页面。在加载视图的ActionResult
方法中,我想调用GetData()
并以与上面引用的 ajax 调用中的data
值匹配的方式返回它的结果。
我怎样才能实现这样的事情? 我假设我需要将调用的结果添加到视图的模型中,然后将值分配给视图中的 JS 变量。
像这样:
public ActionResult Index() {
var iModel = new IndexModel();
iModel.DataResults = GetData();
return View(iModel);
}
然后在视图本身中,如下所示:
var dataHolder = @Model.DataResults;
这不起作用,我只是得到类型的命名,而不是实际数据,因为它存在于 ajax 调用内的 data
变量中。
我怎样才能做到这一点?
您可以将视图模型 JSON 序列化为 JavaScript 变量:
@model MyViewModel
<script type="text/javascript">
var dataHolder = @Html.Raw(Json.Encode(Model));
// At this stage you could use the dataHolder variable
// that will contain all information about your view model
</script>
现在,dataHolder
javascript 变量将保存您传递给视图的整个视图模型。您将可以访问其所有属性,并且不需要执行昂贵的 AJAX 请求。只有当您想在用户进行一些输入后从服务器获取一些新数据时,而不是在初始页面加载时,您才会进行这些操作。SPA 的全部目的是,您的视图可以在视图模型的形式下提供尽可能多的初始信息,您可以将该视图模型序列化为简单的 JavaScript 变量。
相关文章:
- 如何在Jquery中发布后将值从视图返回到控制器
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- float's未返回到移动视图结束后的位置
- 从Nodejs中的函数返回数组,并将其发送到ejs视图
- 当视图在AngularJS中返回时,我如何获得异步服务调用来更新视图
- 在主干视图中的每个方法之后是否需要“返回此内容”
- 可以'在使用Javascript/AjaxMVC之后,不会返回到任何视图
- 如何使用jsonp调用返回的数据在Durandal中呈现视图
- 如何在视图中显示json返回的linq列表
- “渲染骨干模型视图”返回未定义的结果
- 如何在返回后将状态保持为突出显示JQuery树视图的选定节点
- 在视图模型中使用 MVC 视图返回 JsonResult 数据
- 挖空映射对象未由杜兰达尔视图模型返回
- 将返回值作为主干视图方法之间的参数传递
- 如何告诉MVC 4视图返回带有子路由的JSON结果
- CanJS视图返回@@!!@@if视图包含HTML表
- JavaScript实现的打印二进制树的左视图返回错误的结果
- Backbonejs确定哪个函数从模型向视图返回了响应
- 我应该从一个简单的django AJAX视图返回什么样的响应?
- 骨干:传递模型属性给视图返回未定义