2016-04-05 5 views
1

Ich habe einen Repeater:Wie Daten zu übergeben in Artikel Repeater Onclick-Taste, um JavaScript-Datei zur Verwendung in Ajax

<div class="container" id="TourDetail"> 
    <asp:Repeater ID="RptTourDetail" runat="server" DataSourceID="ODSTTitle" ItemType="Tour" 
EnableViewState="false" OnItemDataBound="RptTourDetail_ItemDataBound"> 
     <HeaderTemplate> 
    <ul> 
     </HeaderTemplate> 
     <ItemTemplate> 
     <li> 
      <span class="ForGenHandle"> 
       <%# Item.TourId %> 
      </span> 
      <div id="tright"> 
       <input runat="server" type="button" name="name" value="INQUIRE" class="Inq" id="InqBtn" /> 
      </div> 
     </li> 
     </ItemTemplate> 
     <FooterTemplate> 
    </ul> 
     </FooterTemplate> 
    </asp:Repeater> 
</div> 

Dass es meinen Repository verwendet, um Daten zu zeigen. Ich habe eine Schaltfläche in diesem Repeater:

<input runat="server" type="button" name="name" value="INQUIRE" class="Inq" id="InqBtn" /> 

Onclick auf dieser Schaltfläche öffnet eine Schachtel mit einigen Daten der einzelnen Elemente im Repeater.

enter image description here

ich verwendet Ajax, es zu tun. Hier ist mein Allgemein Handler:

public void ProcessRequest (HttpContext context) { 
    int x = Convert.ToInt32(context.Request.QueryString["TourID"]); 
    context.Response.ContentType = "application/json"; 
    context.Response.Write(JsonConvert.SerializeObject(new ATourDateRep().GetById(x))); 
} 

und hier ist mein Javascript-Codes:

$('.Inq').click(function() { 

$.ajax({ 

url: '../Services/TourDates.ashx?TourID=<%%>', 

success: function (e) { 
    for (var i = 0; i < e.length; i++) { 
     $('<li />').html("<div>" + 
     e[i].TourStartDate + "</div>" + "<div>300$</div>" + " <div>500$</div>").appendTo('#list'); 
       } 
      } 
     }); 
    } 
); 

Hat jemand wissen, wie TourId jedes Element des Repeaters in generische Handler als Query-String zu übergeben? In dieser Linie meine ich:

url: '../Services/TourDates.ashx?TourID=<%%>'

Hier mein Repository ist, wenn nötig:

public class ATourDateRep 
{ 
    private DatabaseEntities model = new DatabaseEntities(); 
    public List<TourDate> GetById(int Id) 
    { 
     return model.TourDates.Where(e => e.TourId == Id).ToList(); 
    } 
} 

Antwort

1

Könnten Sie bitte folgenden Ansatz versuchen:

1) Ändern Sie die <input> Linie als data-TourID in sie setzen:

<input runat="server" type="button" data-TourID="<%# Item.TourId %>" name="name" value="INQUIRE" class="Inq" id="InqBtn" /> 

2) Dann JS-Code wie folgt ändern:

$('.Inq').click(function() { 
    var TourID = $(this).data("TourID"); //read the tour ID 
    $.ajax({ 

     url: '../Services/TourDates.ashx?TourID='+TourID, 
     success: function (e) { 

      for (var i = 0; i < e.length; i++) { 
       $('<li />').html("<div>" + 
       e[i].TourStartDate + "</div>" + "<div>300$</div>" + " <div>500$</div>").appendTo('#list'); 

      } 
     } 
    }); 
}); 
+0

ja danke es hat das selbe problem der anderen antwort aber es ist jetzt gelöst. Wirklich danke dir. Ich weiß nicht, welchen. Beide waren hilfreich. Danke –

+0

Kein Problem. Im Allgemeinen gehe ich für die erste Antwort in einer solchen Situation. Vielen Dank. – vijayP

+0

danke 1000000 mal –

1

Verwenden jquery's sibling() die Spanne zu erhalten, die TourId enthält:

$('.Inq').click(function() { 

$.ajax({ 

url: '../Services/TourDates.ashx?TourID=' + $(this).parent().siblings('span').html(), //Modify in this line 
success: function (e) { 

    for (var i = 0; i < e.length; i++) { 

$('<li />').html("<div>" + 
e[i].TourStartDate + "</div>" + "<div>300$</div>" + " <div>500$</div>").appendTo('#list'); 

       } 
      } 
     }); 

    }); 
+0

ich es testen und '$ (this) .siblings ('span') .html() 'gibt Undefined .. !! . wirklich danke für deine Hilfe immer. –

+0

Funktioniert '$ (this) .parent(). Geschwister ('span') .html()'? – Bikee

+0

funktioniert es gut mit der ersten Einschaltknopf-Taste des Repeaters. aber klicken Sie auf die Schaltfläche der nächsten Elemente, es funktioniert nicht richtig. und es zeigt die Daten der Schaltfläche, die ich für jedes Element zuerst immer wieder klicke. –

Verwandte Themen