在C#中,我是从控制器执行此操作的:
public ActionResult GetCompanies()
{
var vm = new CompanyViewModel { jsonData = JsonConvert.Serialize(_repository.All<Company>()) };
return View(vm);
}
ViewModel看起来像这样:
public CompanyViewModel
{
public string jsonData {get;set}
}
在客户端:
@model MyWebApp.ViewModels.CompanyViewModel
@Scripts.Render("~/bundles/knockout")
<script type="text/javascript">
var serverData = <!-- Many Things To Do Here -->
</script>
在<!-- Many Things To Do Here -->
部分中,您可以执行一些操作将服务器数据放入JavaScript对象。
执行此操作的最佳方法是什么,因为我遇到JSON.parse
与JSON.NET序列化的某些字符有关的问题。
只是将普通数据放在那里(它有效):var serverData = @Html.Raw(@Model.jsonData)
这里应该/可以做些什么?
答案 0 :(得分:1)
不是仅仅为了保存JSON字符串而创建模型,只需将普通的.NET对象传递给视图,然后将其序列化为JSON:
在您的控制器中:
public ActionResult GetCompanies()
{
return View(_repository.All<Comapny>());
}
然后在你看来:
<script>
var companies = @Html.Raw(JsonConvert.SerializeObject(Model));
</script>
如果您希望/需要在视图中使用强类型模型,则应将CompanyViewModel
更改为:
public class CompanyViewModel
{
public IList<Company> Companies {get; set;}
//Or whatever sort of collection your repository returns
}
在您的控制器中
public ActionResult GetCompanies()
{
var vm = new CompanyViewModel { Companies = _repository.All<Company>() };
return View(vm);
}
然后在你看来:
@model MyWebApp.ViewModels.CompanyViewModel
<script>
var companies = @Html.Raw(JsonConvert.SerializeObject(Model.Companies));
</script>