Javascript: как перебирать список объектов в Model

поэтому мне нужно получить имена учеников в списке объектов-учеников, которые находятся в модели представления, а затем отправить их на сервер через $.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<student> { get; set;}
}
</student>

Сначала я хочу просто отправить объект списка учеников как есть, но это может быть не очень хорошая идея, поскольку он связан со слишком большим количеством атрибутов (он дал мне эту "круговую" ошибку, когда я попытался отправить модель) и мне действительно нужно отправить конкатенированное имя FirstName и LastName на контроллер с помощью метода $.post, который у меня уже есть. Я пробовал такие вещи:

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.

Но я получаю сообщение об ошибке "i" не существует так, как я могу перебирать javascript через список объектов в моей модели представления, получать доступ к атрибутам и конкатенировать их, а затем сохранять их в массиве строки, чтобы я мог отправить его на контроллер? Я предполагаю, что контроллер будет выглядеть следующим образом:

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

Спасибо!

4 ответа

У вас есть недопустимый javascript.

Сначала начните с фиксации своей модели представления, чтобы у вас был компиляционный код С# (вам не было имени свойства):

public class StudentSearchResult 
{
 public IEnumerable<student> Students { get; set;}
}
</student>

Затем, предполагая, что действия вашего контроллера отправляют результат 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);
 });
});

или даже простой ol for, если вы предпочитаете:

$.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);
 }
});

UPDATE:

Похоже, я допустил ошибку, полагая, что вы выполняете запрос AJAX. Вместо этого вам нужно получить доступ к свойствам модели в javascript. Вот как это можно сделать:

@model StudentSearchResult


Похоже, что вам нужно вывести имена пользователей клиенту как JSON? Попробуйте следующее:

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

Я не очень хорошо знаком с синтаксисом Razor, но думаю, что вы все еще можете понять код выше.


вы можете использовать $.each jquery для итерации результата.

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

и для ошибки. вы допустили ошибку в объявлении переменной цикла

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


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

вместо

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

должен работать.

licensed under cc by-sa 3.0 with attribution.