ASP.NET MVC JsonResult和把手,没有抓地力?

Gie*_*ius 2 asp.net-mvc json asp.net-mvc-3 handlebars.js

我正在查看使用hadlebars.js的示例,其中模板处理如下所示:

 var source   = $("#some-template").html();
 var template = Handlebars.compile(source);
 var data = { users: [
  {username: "alan", firstName: "Alan", lastName: "Johnson", email: "alan@test.com" },
  {username: "allison", firstName: "Allison", lastName: "House", email: "allison@test.com" },
  {username: "ryan", firstName: "Ryan", lastName: "Carson", email: "ryan@test.com" }
]};
$("#content-placeholder").html(template(data));
Run Code Online (Sandbox Code Playgroud)

和模板是:

  <tbody>
  {{#users}}
    <tr>
      <td>{{username}}</td>
      <td>{{firstName}} {{lastName}}</td>
      <td>{{email}}</td>
    </tr>
  {{/users}}
</tbody>
Run Code Online (Sandbox Code Playgroud)

现在我有来自ASP.NET MVC的JSON结果,我想不出我应该描述我的模板的方式,因为它没有"users"属性,它看起来像:

{[{username: "alan", firstName: "Alan", lastName: "Johnson", email: "alan@test.com" }]}
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式影响JsonResult输出我需要的东西,或者有一种方法来修复模板而不触及控制器代码?

Dar*_*rov 8

在您的控制器中替换:

return Json(users);
Run Code Online (Sandbox Code Playgroud)

有:

return Json(new { users = users });
Run Code Online (Sandbox Code Playgroud)


man*_*lds 7

或者,在不使用users属性引入匿名对象的情况下,您可以更改模板,如下所示:

<tbody>
  {{#each this}}
    <tr>
      <td>{{username}}</td>
      <td>{{firstName}} {{lastName}}</td>
      <td>{{email}}</td>
    </tr>
  {{/each}}
</tbody>
Run Code Online (Sandbox Code Playgroud)