2016-11-16 5 views
2

Im은 다음 함수에서 생성 된 List를 전달하려고 시도합니다.cshtml 뷰에서 jquery 함수로리스트 전달

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)"> 

이 내가 목록에 액세스 내가 얻을 IDS에서 작업을 수행 할 jQuery 코드입니다;

function sendWelcomeEmail(elem) { 
    $.each($(elem).attr("data-studentids"), function (index, value) { 
     alert(index + ": " + value); 
    }); 
} 

하지만 목록 대신

TypeError: invalid 'in' operand obj
var length = !!obj && "length" in obj && obj.length,

누군가가 알려 주시기 바랍니다 수있는 것을 내가지고있어 오류에서 ID를받지 못했습니다 경우 임 잘못된 것?

+0

html이 렌더링되는 방식을 확인하십시오. 그렇게 복잡한 인라인 함수를 호출 할 수 없다는 느낌이 들었습니다. –

답변

2

GetIDs 메서드에서 반환 된 List<string>을 출력하면 문자열에만 강제 적용됩니다. 따라서 귀하의 출력은 다음과 같습니다

<a href="#" data-studentids="System.Collections.Generic.List`1[System.Int64]" ... 

당신이 함께 데이터를 Join() 수있는이 문제를 해결하고 JS의 배열에 다시 다음 split()을 위해. 이 시도 :

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 선택기를 수정하여 필요에 맞게 조정할 수 있습니다. 이 예제에서 엘리먼트의 유일하게 관련된 애트리뷰트이기 때문에 간단히 사용했다.

+0

** 문제를 지적 해 주셔서 감사합니다 **. 그것은 내 문제를 해결했다. – Appu

관련 문제