将列表从cshtml视图传递给jquery函数
本文关键字:jquery 函数 视图 列表 cshtml | 更新日期: 2023-09-27 18:18:04
我试图传递从以下函数生成的列表;
public List<long> GetIDs()
{
var ids = new List<long>();
foreach(var s in student)
{
ids.Add(s.ID);
}
return ids;
}
并通过razor视图传递列表,并在jquery中访问列表。
下面是CSHTML代码:
<a href="#" class="color-blue" data-studentids = "@schoolLicense.GetIDs()" onclick="sendWelcomeEmail(this)">
这是jquery代码我想在这里访问列表并根据得到的id执行操作;
function sendWelcomeEmail(elem) {
$.each($(elem).attr("data-studentids"), function (index, value) {
alert(index + ": " + value);
});
}
但是我并没有从列表中获取id而是得到了错误值
有谁能告诉我我哪里错了吗?TypeError: invalid 'in' operandobj
Var长度= !!obj,,"length"在obj &&obj.length,
您的问题是因为通过输出从GetIDs
方法返回的List<string>
,您只是将其强制转换为字符串。因此你的输出是:
<a href="#" data-studentids="System.Collections.Generic.List`1[System.Int64]" ...
要解决这个问题,您可以将Join()
数据放在一起,然后将split()
数据放回JS中的数组中。试试这个:
public List<long> GetIDs()
{
return student.Select(s => s.ID).ToList();
}
<a href="#" class="color-blue" data-studentids="@String.Join(",", schoolLicense.GetIDs())">
$('.colour-blue').click(function(e) {
e.preventDefault();
$(this).data('studentids').split(',').forEach(v, i) {
console.log(i + ": " + v);
});
});
注意GetIDs
方法中LINQ的简化使用,以及JS中不引人注目的事件处理程序的使用。
您可以修改jQuery对象中的.colour-blue
选择器以更好地满足您的需求。我只是在这个例子中使用它,因为它是元素上唯一相关的属性。