【问题标题】:jQuery: How to traverse / Iterate over a list of objectjQuery:如何遍历/迭代对象列表
【发布时间】:2015-08-24 03:41:28
【问题描述】:

我正在使用 asp.net MVC4 进行网络应用开发。

我想遍历 ViewModel 中的对象列表。

下面是对象的类:

public class User
{
        public int Id {get; set;}
        public string Name {get; set;}
        public string Address {get; set;}
        public string Department {get; set;}
}

下面是我的ViewModel类:

public class UserViewModel
{
      public List<User> AllUsers {get; set;}
      public bool IsDeleted {get; set;}
}

正如在UserViewModel 类中看到的,我有一个User 类型的对象列表。现在我想使用Jquery 遍历AllUsers 列表中的每个用户对象并从中获取数据。

为此,我尝试执行以下操作:

$(@Model.AllUsers).each( function(){ .... });

我使用上述方法尝试了不同的组合,但未能成功。任何人都可以提出相同的解决方案。

提前致谢。

【问题讨论】:

  • 你得到什么错误?您是否尝试过以这种方式使用$.each() 函数:$.each(@Model.AllUsers, function() {});
  • 如果你想做一个正常的循环 @foreach(var user in @Model.AllUsers) {//try } 。欢呼
  • 大多数时候语法错误
  • @supercool:如果我使用这种方法,我将无法访问 for each 循环之外的任何变量。在我的情况下,我需要执行一些条件检查。
  • 是吗?我相信你可以访问。 $.each 或 @foreach 任何 EOD 都做同样的事情。如果你想访问外部变量,你可以通过@ 符号轻松访问它们,即@if(@status == false) inside loop。

标签: javascript jquery asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

使用将您的集合分配给 javascript 变量

var users = @Html.Raw(Json.Encode(Model.AllUsers))

然后您可以对其进行迭代

$.each(users, function(index, item) {
  // access the properties of each user
  var id = item.Id;
  var name = item.Name;
  ....
});

【讨论】:

  • 感谢您的回答。您能否详细说明遍历部分?那是关于上面的 User 类。
  • 只是Html.Raw() 不行吗?需要Json.Encode吗?
  • @StephenMuecke:我在 JSON.parse 上遇到以下异常:在序列化类型为“System.Data.Entity.DynamicProxies.User_D02A520B40433C88E2D653B140881AE8C121BC55EC122BCB5567A8B08366EApan2A”的对象时检测到循环引用。
  • 这意味着 typeof User 将包含一个属性 User - 但这不是您问题中的代码所表示的?
【解决方案2】:
<script type="text/javascript">

    var UsersList = @Html.Raw(Json.Encode(Model.AllUsers))

    for (var i = 0; i < UsersList.length; i++) {
        alert(UsersList[i].Id);
        alert(UsersList[i].Name);

    } 
 </script>

【讨论】:

    【解决方案3】:

    JavaScript 通常对 razor 组件不满意,尽管如果上述内容是 CSHTML 文件的一部分,它会起作用。

    其他方法是:

    1. 使用剃刀显示集合@foreach ...
    2. 将集合作为参数从您的网页传递到某个事件的 JavaScript 函数中

    你是如何调用这个函数的,它是做什么的?

    【讨论】:

      【解决方案4】:

      在我的情况下,我是这样修复的:

       @for(int i=0;i<Model.AllUsers.Count;i++)
       {
         @: var name = '@Html.Raw(@Model.AllUsers[i].Name)';
         @:alert(name);
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-08
        • 2021-04-25
        • 1970-01-01
        • 1970-01-01
        • 2019-02-27
        • 1970-01-01
        相关资源
        最近更新 更多