2017-06-09 1 views
1

Ich habe ein Modell, das eine Listeneigenschaft enthält List<EducationalBackground> EducationalBackground und in der Rasierklinge Form möchte ich den Benutzer mehrere Institutionen eingeben.Wie zu binden Liste <T> auf Form Post in ASP.Net MVC C#

Modell

public class Application 
{ 
    ... 
    [Required(ErrorMessage = "Required Field")] 
    public List<EducationalBackground> EducationalBackground { get; set; } 
    ... 
    public Application() 
    { 
     ... 
     EducationalBackground = new List<Library.EducationalBackground>(); 
     ... 
    } 
} 

Hier ist die Klasse:

public class EducationalBackground 
{ 
    public string InstituteName { get; set; } 
    ... 
} 

In der Rasierklinge Ansicht ich versuche wie diese

@Html.TextBoxFor(m => m.EducationalBackground[0].InstituteName, new { @class = "form-control" }) 

aber offensichtlich ist es nicht, weil die Liste arbeiten (EducationalBackground) ist leer.

Der Benutzer muss eine „Add New Institution“ Taste, so dass die erste Liste Größe unbekannt

Wie kann ich das richtig erreichen?

UPDATE Meine Lösung gefunden. Suchen Sie nach meinem Beitrag in der Antwort Abschnitt

+1

Verweisen Sie die Antworten [hier] (https://stackoverflow.com/questions/28019793/submit-same-partial-view-called-multiple-times-data-to-controller/28081308#28081308) und [hier] (http : //stackoverflow.com/questions/40539321/partial-view-passing-a-collection-using-the-html-begincollectionitem-helper/40541892#40541892) für einige Optionen zum dynamischen Hinzufügen und Löschen von Sammlungselementen –

Antwort

1

ich meine Antwort gefunden. Ich kann mehrere EducationalBackground Elemente binden wie diese

<input type="text" name="EducationalBackground[0].InstituteName" class="form-control" /> 
<input type="text" name="EducationalBackground[1].InstituteName" class="form-control" /> 
<input type="text" name="EducationalBackground[2].InstituteName" class="form-control" /> 

Wenn die Form Pfosten, wird eine Liste der Größe 3

Der Benutzer kann eine „Add New Institution“ -Schaltfläche wird erstellen, so dieses Muster folgend, I wird JS verwenden, um im laufenden Betrieb neue input Elemente

1

ändern Sie den Konstruktor der Klasse Application dazu:

EducationalBackground = new List<Library.EducationalBackground>() 
{ 
    new Library.EducationalBackground() 
}; 
+1

Dies funktioniert, wenn ich Ich möchte nur einen einzigen Listeneintrag veröffentlichen. Ich möchte, dass der Benutzer mehrere Institutionen hinzufügt. – esausilva

+0

Ich habe gerade Ihre Frage beantwortet. Wenn Sie dies tun möchten, haben Sie ihre Antworten. –

2

zu generieren Ich bin nicht ganz sicher, was der Zweck Ihrer Ansicht ist, eine Liste von EducationalBackground zu bearbeiten oder neue hinzuzufügen. Wenn Sie sie bearbeiten möchten, müssen Sie sie natürlich von irgendwo wie Datenbank zum Beispiel nehmen.

  1. bearbeiten Fall:

In der Aktion, die Sie haben:

EducationalBackground = new List<Library.EducationalBackground> 
{ 
    new EducationalBackground(...), 
    new EducationalBackground(...), 
    new EducationalBackground(...), 
    ..... //How many you want 
} 

Nach Ansicht Sie haben:

@foreach(var educationbackground in Model) 
{ 
    @Html.TextBoxFor(m => educationbackground.InstituteName, new { @class = "form-control" }) 
} 
  1. Neu hinzufügen Einsen.

Wenn Sie neue hinzufügen und wie Sie beantwortet haben, können Sie einfache HTML-Syntax verwenden, um diese zu erreichen: Wenn Sie die Größe der Liste nicht wissen, die Sie hinzufügen möchten Sie einen anderen Weg wählen können, wie in jQuery oder AngularJS dies für Sie tun:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     var size = 0; 
     $("#btnAdd").click(function(){ 
      $(".someDiv").append("<input type='text' name='EducationalBackground["+size+"].InstituteName' class='form-control' />"); 
      size++; 
     }) 
    }) 
</script> 

EDIT für Geige

Werfen Sie einen Blick auf diese Geige here

+1

Das funktioniert, wenn ich bereits eine Liste habe und diese dem Benutzer anzeigen möchte. In meinem Fall möchte ich, dass der Benutzer die Liste der Institutionen erstellt – esausilva

+0

Der Benutzer wird eine Schaltfläche "Neue Institution hinzufügen" haben, so dass die Listengröße unbekannt ist. Danke – esausilva

+0

@JGeZau Sollte die Frage mit dieser Erklärung zunächst gepostet haben. –