我试图传递从以下函数生成的List;
public List<long> GetIDs()
{
var ids = new List<long>();
foreach(var s in student)
{
ids.Add(s.ID);
}
return ids;
}
并通过剃刀视图传递列表并访问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:无效&#39; in&#39;操作数obj
var length = !! obj&amp;&amp; &#34;长度&#34;在obj&amp;&amp; obj.length,
有谁能告诉我哪里出错了?
答案 0 :(得分:2)
您的问题是因为输出从List<string>
方法返回的GetIDs
,您只是将其强制转换为字符串。因此您的输出是:
<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
选择器,以更好地满足您的需求。我只是在这个例子中使用它,因为它是元素上唯一的相关属性。