Javascript:如何遍历模型中的对象列表

所以我需要在视图模型中的学生对象列表中获取学生的名字,然后通过$ .post将它们发送到服务器,后者我已经弄明白但我无法弄清楚如何遍历对象列表。 基本上我有这个:

//Student object public class Student { public string FirstName { get; set; } public string LastName { get; set; } //Like a bunch of other attributes here } 

这是视图中的模型:

 //StudentSearchResult ViewModel public class StudentSearchResult { public IEnumerable { get; set;} } 

起初我只是按原样发送学生列表对象,但它可能不是一个好主意,因为它捆绑了太多属性(当我尝试发送模型时它给了我’循环’错误)而且我只真的需要使用我已有的$ .post方法将连接的FirstName和LastName发送到控制器。 我尝试过这样的事情:

 var names = [] var length = "@Model.StudentSearchResult.count()"; for (int i = 0; i < length; i++) { names[] = "@Model.StudentSearchResult[i].Name + @Model.StudentSearchResult[i].LastName" } //$.post function here that calls the controller and send the concatenated names of each student in studentsearchresult. 

但是我得到一个“我”不存在的错误,所以,如何通过我的视图模型中的对象列表迭代javascript,访问属性并连接它们然后将它们存储在字符串数组中,以便我可以把它发送给控制器吗? 我想控制器看起来像这样

 [HttpPost] public ActionResult StudentSearchResult(/*other stuff I send here, */ string[] studentNames){ //stuff here return View(); } 

谢谢!

你那边有一些无效的javascript。

首先修复视图模型,以便编译C#代码(缺少属性名称):

 public class StudentSearchResult { public IEnumerable Students { get; set;} } 

然后假设您的控制器操作将JSON结果发送到客户端(这可确保视图模型正确地进行JSON编码并且发送application/json响应内容类型标头):

 [HttpPost] public ActionResult StudentSearchResult(/*other stuff I send here, */ string[] studentNames) { StudentSearchResult model = ... //stuff here to populate your view model return Json(model); } 

您可以使用$.each()函数轻松迭代客户端:

 var studentNames = ['name1', 'name2']; $.post('/Students/StudentSearchResult', studentNames, function(result) { var students = result.Students; $.each(students, function() { alert('FirstName: ' + this.FirstName + ' LastName:' + this.LastName); }); }); 

如果您愿意,甚至可以使用简单的“循环”:

 $.post('/Students/StudentSearchResult', studentNames, function(result) { var students = result.Students; for (var i = 0; i < students.length; i++) { var student = students[i]; alert('FirstName: ' + student.FirstName + ' LastName:' + student.LastName); } }); 

更新:

看起来我因为相信您正在执行AJAX请求而犯了一个错误。 相反,您需要访问javascript中的模型属性。 以下是如何做到这一点:

 @model StudentSearchResult  
 for (var i = 0; i < length; i++) 

代替

 for (int i = 0; i < length; i++) 

应该管用。

你可以使用$ .each的jquery迭代结果。

 $.each(yourModel,function(){//do with loop}); 

并为错误。 你在循环变量的声明中犯了错误

 for (var i = 0; i < length; i++) 

看起来你需要的是将用户名作为JSON输出到客户端? 试试这个:

 var names = @Model.StudentSearchResult.Select(s => new { s.FirstName, s.LastName }).ToList(); 

我对Razor语法不太熟悉,但我认为您仍然可以理解上面的代码。