so I need to get to fetch the names of students in a list of student object that is in a view's model then send them to the server via $.post, the latter I have figured it out but I can't figure out how to iterate through the list of objects. Basically I have this:
//Student object
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
//Like a bunch of other attributes here
}
This is the model in the view:
//StudentSearchResult ViewModel
public class StudentSearchResult {
public IEnumerable<Student> { get; set;}
}
At first I though of just sending the student list object as is, but it may not be a good idea as it is bundled with too many attributes (it gave me this 'circular' error when I tried to send the model) and I only really need to send the concatenated FirstName and LastName to the controller using the $.post method I already have. I tried things like these:
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.
But I'd get an error that "i" doesn't exists so, how can I iterate in javascript through the list of objects in my view model, access the atributes and concatenate them and then store them on an array of strings so that I may send it to the controller? I imagine the controller would look like this
[HttpPost]
public ActionResult StudentSearchResult(/*other stuff I send here, */ string[] studentNames){
//stuff here
return View();
}
Thanks!
you can use $.each of jquery to iterate the result.
and for the error. you made mistake in declaration of loop variable
instead of
should work.
Looks like what you need is to output the user names to the client as JSON? Try this:
I'm not quite familiar with the Razor syntax, but I think you can still understand the code above.
You have some invalid javascript over there.
First start by fixing your view model so that you have a compiling C# code (you were missing a property name):
Then assuming your controller actions sends a JSON result to the client (this ensures that the view model is properly JSON encoded and that the
application/json
response content type header is sent):you could easily iterate on the client using the
$.each()
function:or even a plain ol'
for
loop if you prefer:UPDATE:
It looks like I have I made a mistake by believing that you were performing an AJAX request. Instead what you need is access the model properties in javascript. Here's how this could be done: