C# 使用视图模型中的MVC视图返回JsonResult数据
我目前使用Knockout在页面加载后动态加载数据。我使用的是控制器方法,比如:C# 使用视图模型中的MVC视图返回JsonResult数据,c#,javascript,asp.net-mvc,C#,Javascript,Asp.net Mvc,我目前使用Knockout在页面加载后动态加载数据。我使用的是控制器方法,比如: public JsonResult GetData(int paramId) { return Json(new { Field1: true }); } 这就是所谓的like(在JS中): 在这里,数据对象是一个已经可以被JS访问的对象 当我想刷新单个项目时,这种方法很好,但它使初始加载效率相当低-需要进行大量调用来初始化页面。 在加载视图的ActionResult方法中,我想调用GetData()并以
public JsonResult GetData(int paramId)
{
return Json(new { Field1: true });
}
这就是所谓的like(在JS中):
在这里,数据
对象是一个已经可以被JS访问的对象
当我想刷新单个项目时,这种方法很好,但它使初始加载效率相当低-需要进行大量调用来初始化页面。
在加载视图的ActionResult
方法中,我想调用GetData()
并以与上面提到的ajax调用中的data
值匹配的方式返回结果
我怎样才能做到这一点?我假设需要将调用的结果添加到视图的模型中,然后将值分配给视图中的JS变量
比如:
public ActionResult Index() {
var iModel = new IndexModel();
iModel.DataResults = GetData();
return View(iModel);
}
var dataHolder = @Model.DataResults;
然后在视图本身中,类似于:
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>
@model MyViewModel
var dataHolder=@Html.Raw(Json.Encode(Model));
//在此阶段,您可以使用dataHolder变量
//将包含有关视图模型的所有信息
现在,
dataHolder
javascript变量将保存传递给视图的整个视图模型。您将可以访问它的所有属性,并且不需要执行昂贵的AJAX请求。只有在用户进行一些输入后,而不是在初始页面加载时,您才需要从服务器获取一些新数据。SPAs的全部目的是,您的视图可以以视图模型的形式提供尽可能多的初始信息,您可以将视图模型JSON序列化为一个简单的javascript变量。您可以将视图模型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>
@model MyViewModel
var dataHolder=@Html.Raw(Json.Encode(Model));
//在此阶段,您可以使用dataHolder变量
//将包含有关视图模型的所有信息
现在,
dataHolder
javascript变量将保存传递给视图的整个视图模型。您将可以访问它的所有属性,并且不需要执行昂贵的AJAX请求。只有在用户进行一些输入后,而不是在初始页面加载时,您才需要从服务器获取一些新数据。SPAs的全部目的是,您的视图可以以视图模型的形式提供尽可能多的初始信息,您可以将其JSON序列化为一个简单的javascript变量。谢谢您的回复。当我尝试你的建议时,我得到一个错误,说Json没有Serialize
方法。对不起,我犯了一个错误,它是Json.Encode
,而不是Json.Serialize
。我已经更新了我的答案来解决这个问题。谢谢你的回复。当我尝试你的建议时,我得到一个错误,说Json没有Serialize
方法。对不起,我犯了一个错误,它是Json.Encode
,而不是Json.Serialize
。我已经更新了我的答案来解决这个问题。