将列表从cshtml视图传递给jquery函数

时间:2016-11-16 09:41:23

标签: c# jquery asp.net-mvc razor

我试图传递从以下函数生成的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,

有谁能告诉我哪里出错了?

1 个答案:

答案 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选择器,以更好地满足您的需求。我只是在这个例子中使用它,因为它是元素上唯一的相关属性。