2016-04-26 3 views
0

Ich versuche, eine Seite zu erstellen, um "Person" zu bearbeiten, aber ich habe Probleme mit dem Bearbeiten eines List-Objekts (und durch Bearbeiten, ich meine, wie Sie dynamisch eine E-Mail hinzufügen zur Liste). Sowohl online als auch auf stackoverflow zu recherchieren, hat mich zu EditorTemplates geführt und dann Elemente mit ajax dynamisch hinzugefügt. Allerdings habe ich irgendwo eine Verbindung verpasst. Entweder erstelle ich ein ungebundenes leeres Textfeld für die neue E-Mail oder erhalte einen Null-Referenzfehler.Bearbeitungsformular für Liste <String> MVC 4

Modell:

[DynamoDBTable("people")] 
public class Person 
{ 
    [DynamoDBHashKey] 
    [DynamoDBProperty(AttributeName = "name")] 
    public string Name{ get; set; } 

    [DynamoDBRangeKey] 
    [DynamoDBProperty(AttributeName = "id")] 
    public string ID { get; set; } 

    [DynamoDBProperty(AttributeName = "emails")] 
    public List<string> Emails{ get; set; } 

    public Person() 
    { 

    } 
} 

Ausblick:

<div id="emails" class="row"> 
    <div class="form-group col-xs-6 col-sm-6"> 
     @Html.LabelFor(x => x.Emails) 
     @Html.EditorFor(x => Model.Emails, new { @class = "form-control"}) 
    </div> 
    <button id="addEmail">Add</button> 
</div> 

<script type="text/javascript"> 
     $("#addEmail").on('click', function (event) { 
      event.preventDefault(); 
      $.ajax({ 
       async: false, 
       url: '/controller/newEmail' 
      }).success(function (partialView) { 
       $('#emails').append(partialView); 
      }); 
     }); 
</script> 

EditorTemplate - Person:

@model Models.Person 

@for (int i = 0; i < Model.Emails.Count(); i++) 
{ 
    @Html.EditorFor(x => Model.Emails) 

} 

EditorTemplate - String:

@model string 

@Html.TextBoxFor(model => Model) 

Controller:

public ActionResult newEmail() 
{ 
    var emails = new Person().Emails; 

    return PartialView("~/Views/Shared/EditorTemplates/string.cshtml", emails); 
} 
+0

Sie brauchen nicht zu Ajax. Sie müssen nur eine neue Eingabe hinzufügen - '' an ​​das DOM mit Javascript/jquery. –

Antwort

0

Ihr Person.Emails Objekt ist null und

public ActionResult newEmail() 
{ 
    var emails = new Person().Emails; 

    return PartialView("~/Views/Shared/EditorTemplates/string.cshtml", emails); 
} 

ändern sie nicht initialisiert wurde:

public ActionResult newEmail() 
{ 
    var emails = new Person().Emails = new List<string>(); 

    return PartialView("~/Views/Shared/EditorTemplates/string.cshtml", emails); 
}