Ric*_*rdo 9 javascript c# asp.net-mvc razor
所以我需要在视图模型中的学生对象列表中获取学生的名字,然后通过$ .post将它们发送到服务器,后者我已经弄明白但我无法弄清楚如何遍历对象列表.基本上我有这个:
//Student object
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
//Like a bunch of other attributes here
}
Run Code Online (Sandbox Code Playgroud)
这是视图中的模型:
//StudentSearchResult ViewModel
public class StudentSearchResult {
public IEnumerable<Student> { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
起初我虽然只是按原样发送学生列表对象,但它可能不是一个好主意,因为它捆绑了太多属性(当我尝试发送模型时它给了我'循环'错误)而且我只真的需要使用我已经拥有的$ .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.
Run Code Online (Sandbox Code Playgroud)
但是我得到一个"i"不存在的错误,如何通过我的视图模型中的对象列表迭代javascript,访问属性并连接它们然后将它们存储在字符串数组中,以便我可以把它发送给控制器吗?我想控制器看起来像这样
[HttpPost]
public ActionResult StudentSearchResult(/*other stuff I send here, */ string[] studentNames){
//stuff here
return View();
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
Dar*_*rov 28
你那边有一些无效的javascript.
首先修复视图模型,以便编译C#代码(缺少属性名称):
public class StudentSearchResult
{
public IEnumerable<Student> Students { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
然后假设您的控制器操作将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);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下$.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);
});
});
Run Code Online (Sandbox Code Playgroud)
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);
}
});
Run Code Online (Sandbox Code Playgroud)
更新:
看起来我因为相信你正在执行AJAX请求而犯了错误.相反,您需要访问javascript中的模型属性.以下是如何做到这一点:
@model StudentSearchResult
<script type="text/javascript">
var students = @Html.Raw(Json.Encode(Model.Students));
// students is a javascript array that will look like this:
// students = [{"FirstName":"fn1","LastName":"ln1"}, {"FirstName":"fn2","LastName":"ln2"}, ...];
for (var i = 0; i < students.length; i++) {
var student = students[i];
alert('FirstName: ' + student.FirstName + ' LastName:' + student.LastName);
}
</script>
Run Code Online (Sandbox Code Playgroud)