2014-09-27 2 views
0

MVC를 사용하고 있으며 뷰에서 For 루프를 사용하여 동적으로 컨텐트를 생성하고 있습니다. 각 루프 내에서 "주석보기"버튼을 삽입합니다.동적으로 생성 된 버튼을 클릭하십시오.

첫 번째 '댓글보기'버튼을 클릭하면 첫 번째 블록의 데이터와 관련이있는 코드 (예 : 요리 세제 정보)를 실행하려면 어떻게해야합니까? 예 : 버튼이 동적으로 생성되었으므로 해당 데이터 행의 모델에서 ID를 가져 오는 방법은 무엇입니까?

아래 jQuery 코드를 사용하고 싶습니다. 하지만 특정 행의 ID를 잡는 방법을 알지 못합니다.

$("#seeComments").click(function() { 
     alert(ID); 
    }); 

Dynamic button generation

답변

2

각 항목에 html을 생성 할 때 표시하지 않는 값이 포함 된 버튼에 데이터 속성을 추가하여 click 이벤트에서 검색 할 수 있도록하십시오. ID가 아닌 버튼의 클래스 이름을 사용하십시오. 잘못된 html 인 중복 ID가 있으므로 유의하십시오. 예를

@for(int i = 0; i < Model.Count; i++) 
{ 
    <div class="answer"> // wrapper to allow selection 
    <div class="heading"> 
     <span class="name">@Model[i].Name</span> 
     <span class="rating">@Model[i].Rating</span> 
    </div> 
    ..... 
    <button class="comments" type=button" data-id="@Model[i].ID">See Comments</button> 
    .....  
    </div> 
} 

$('.comments').click(function() { 
    var id = $(this).data('id'); 
    var rating = $(this).closest('.answer').find('.rating').text(); 
    .... 
} 
+0

니스 스크립트를 들어

는 작동합니다. 그러나 IEnumerable에 인덱스를 사용할 수 없으므로 @Model [i]를 @ Model.ElementAt (i)로 변경해야했습니다. 그리고 추가 스크립트 정보를 가져 주셔서 감사합니다. '가장 가까운'것을 찾아야했지만 지금 이해해야합니다. 아름답게 작동합니다 ... ;-) – nanonerd

+0

그러면 'for' 루프가 필요하지 않습니다 (질문에 표시된대로). 그것의'IEnumerable','foreach' 루프를 사용할 수 있습니다. 'foreach (모델의 var 항목) {...'및'@ item.Name' 사용 –

+0

원래 foreach를 사용하고있었습니다. 그러나 강조 표시된 섹션의 처음 5 개 항목까지 표시하고 나머지 섹션을 다른 섹션에 표시하는 또 다른 루프를 표시하고 싶기 때문에 계산해야했습니다. foreach를 사용하여 계산을 수행 할 수 있습니까? 그래서 For 루프로 전환했습니다. 다시 한 번 감사 드리며 조금씩 배우기 ... – nanonerd

1

당신은 버튼의 data-id 속성에 관련 행의 ID를 넣고 버튼의 classseeComments을 설정할 수 있습니다. 당신은 당신의 모델 클래스라는 이름의 중첩 된 IEnumerable 속성이 포함 된 경우 뷰 코드는이

@foreach (var answer in Model) 
{ 
    ..... 


    <button type="button" data-id="@answer.ID" class="seeComments">See comments</button> 
} 

처럼 이하와 같은 것, 그래서는 IEnumerable의 가정, 당신의 모델 클래스 정의를 포함하지 않았다 Answers

@foreach (var answer in Model.Answers) 
{ 
    ..... 


    <button type="button" data-id="@answer.ID" class="seeComments">See comments</button> 
} 

.seeComments 선택기를 사용하여 모든 See Comments 버튼의 클릭 이벤트를 바인딩 아래

$(".seeComments").click(function() { 
    // this will display the data-id value of the clicked button 
    alert($(this).data("id")); 
}); 
같은 ID를 잡아 .data("id")를 사용
관련 문제