2016-06-03 8 views
0

Ich verfüge über ein benutzerdefiniertes Benutzersteuerelement, das Informationen zu einer Person enthält, die ich programmatisch zur Seite hinzufüge. Vereinbaren Sie einfach, dass mein Benutzersteuerelement nur den Vor- und Nachnamen einer Person enthält.Arbeiten mit dynamischen Benutzersteuerelementen

<table> 
    <tr> 
    <td> 
     <asp:Label ID="lblFirstName" runat="server">First Name</asp:Label> 
    </td> 
    <td> 
     <asp:TextBox ID="txtFirstName" runat="server" /> 
    </td> 
    </tr> 
    <tr> 
    <td> 
     <asp:Label ID="lblLastName" runat="server">Last Name</asp:Label> 
    </td> 
    <td> 
     <asp:TextBox ID="txtLastName" runat="server" /> 
    </td> 
    </tr> 
</table> 

ich brauche, damit die Benutzer Personen hinzufügen, um eine Veranstaltung teilnehmen, und sie müssen so viele Menschen wie möglich hinzufügen zu können. Ich habe eine Schaltfläche "Person hinzufügen" auf dem Bildschirm. Wenn der Benutzer diese Schaltfläche auswählt, wird der Seite ein leeres Benutzersteuerelement hinzugefügt, damit sie ausgefüllt werden können. In dem nachfolgenden Code verfolge ich, wie viele Personen teilnehmen, damit ich die Benutzersteuerelemente für das Postback mithilfe dieser Liste rendern kann.

Nach dem Ausfüllen der Informationen für alle Teilnehmer muss der Benutzer die Informationen speichern. Wenn sie "Speichern" auswählen, muss ich sicherstellen, dass alle Textfelder ausgefüllt sind. Ich würde es vorziehen, dies mit Javascript zu tun, jedoch weiß ich nicht, wie ich die Informationen finde, da ich nicht sicher sagen kann, wie viele Benutzersteuerelemente auf der Seite geladen sind. So weit habe ich das.

function ValidateSave() { 
    if ('<%= this.AttendingPeople.Count %>' == 0) { 
     alert('Need to fill out at least one person whose attending.'); 
    } 
    else { 
     //Where user controls are added. 
     var children = document.getElementById('<%= divAttending.ClientID %>').children; 
     for (var i = 0; i < children.length; i++) { 

      //Find table inside user control that holds data 
      if (children[i].tagName == 'TABLE') { 
       var table = children[i]; 
       var rows = table.rows; 
       for (var r = 0; r < rows.length; r++) { 
        var row = rows[r]; 
        //Not sure how to extract data from each row 
       } 
      } 
     } 
    } 
} 

Mein erstes Problem ist, dass '<%= this.AttendingPeople.Count %>' immer wieder, was die Anfangszahl in der Liste war. Wenn ich in Page_Load 3 Personen zur Liste hinzufüge, wird die Anzahl immer 3 sein. Wenn ich nichts hinzufüge, wird die Anzahl immer 0 sein, egal wie viele Personen ich im Laufe der Zeit hinzufüge.

Zweitens zweifle ich ernsthaft daran, dass ich alle Daten in der richtigen Weise finden werde. Ich werde jede Art von Rat oder Kritik schätzen. Ich weiß nicht viel über ASP.NET, also weiß ich, dass ich viel zu lernen habe. Danke im Voraus.

Antwort

0

Dieser Code gibt nur die anfängliche Anzahl der teilnehmenden Personen aus, sobald die Ansicht gerendert wurde. Sie können dies in Ihrer Seitenquelle überprüfen.

Um die tatsächliche Anzahl der Teilnehmer zu ermitteln, können Sie den Anfangswert speichern und ihn jedes Mal erhöhen oder verringern, wenn Sie eine Person hinzufügen oder entfernen. Etwas wie das:

var apcount = '<%= this.AttendingPeople.Count %>'; 

/* do it when you add a person */ 
apcount++;