2016-11-10 3 views
-1

Ich verwende Code-First EF. Eine vereinfachte Version der Modelle:Erstellen mehrerer Modelle in ASP.Net MVC

public class Person 
{ 
    public int PersonID { get; set; } 

    public string Name { get; set; } 

    public List<Phone> Phones { get; set; } 
} 
public class Phone 
{ 
    public int PhoneID { get; set; } 

    public string Number { get; set; } 

    public virtual Person Person{ get; set; } 

    public int PersonID { get; set; } 
} 

So habe ich eine Eins-zu-Beziehung zwischen Person und Telefon.

Ich möchte den Benutzer ermöglichen, so viele Telefone wie möglich in der Erstellungsansicht für Person hinzufügen. Wenn das Formular in dieser Ansicht gesendet wird, würde ich sowohl die Person als auch alle hinzugefügten Telefone speichern.

Kann mir jemand in die richtige Richtung zeigen? Ich lese über Editor - für Vorlagen, ist das der richtige Anwendungsfall?

+1

könnte ein Duplikat sein http://stackoverflow.com/questions/33190604/how-to-insert-to-master-detail-tables-in-asp-net-mvc-5 Wie Master-Detail-Tabellen in MVC einfügen 5 – silverfighter

+0

wahrscheinlich nur ein paar Javascript für, wenn sie auf eine Schaltfläche "+" klicken, fügen Sie ein weiteres Eingabeelement auf das Formular – Jonesopolis

+0

Ich habe diesen Teil, es ist mehr bekommen, was sie in die hinzugefügten Eingabe eingegeben und es in der db, die meine Frage ist. Trotzdem danke! – bak

Antwort

0

Sie Ansichtsmodell wie dieses

public class PersonAddViewModel 
{ 
    public string Name{set;get;} 
    public List<string> Phones{set;get;} 
} 

auf dem Formular Ihrer Ansicht verwenden, können Sie

diesem Code hinzufügen können
@using (Html.BeginForm("Add", "Person", FormMethod.Post })) 
{ 
    <div class="col-md-6"> 
     <div class="form-group"> 
      @Html.LabelFor(p => p.Name) 
      @Html.EditorFor(p => p.Name, new { @class = "form-control" }) 
     </div> 
    </div> 
    <div class="col-md-6" id="#row-0"> 
     <div class="form-group"> 
      @Html.LabelFor(p => p.Phones[0]) 
      @Html.EditorFor(p => p.Phones[0], new { @class = "form-control" }) 
     </div> 
    </div> 
    <div id=OtherPhones></div> 
    <button type="button" class="btn btn-danger btn-float btn-float-lg btn-  rounded" id="add"><i class="icon-plus2"></i></button> 
    <button type=submit>Submit</button> 
} 

dann

$("#add").click(function() { 

inputCount++; 

var newDiv = $("#row-0").clone(); 
newDiv.attr('id', 'row-' + inputCount); 

newDiv.find("input,select").each(function() { 
    $(this).attr({ 
     'name': function (_, name) { return name.toString().replace('0', inputCount) }, 
     'id': function (_, id) { return id.toString().replace('0', inputCount) }, 
     'item': function (_, item) { return item.toString().replace('0', inputCount) } 
    }); 

    var type = $(this).attr('type'); 
    if (type === 'hidden') { 

     $(this).val('0'); 
    } else { 
     $(this).val(''); 
    } 
}); 

newDiv.find(".available").each(function() { 
    $(this).attr({ 
     'id': function (_, id) { return id.toString().replace('0', inputCount) } 
    }); 

}); 

newDiv.find(".delCol").each(function() { 
    $(this).find('button').attr('item', inputCount); 
    $(this).fadeIn(); 
}); 

newDiv.find("label").each(function() { 
    $(this).attr({ 
     'for': function (_, id) { return id.toString().replace('0', inputCount) } 
    }); 
}); 

newDiv.find(".field-validation-valid").each(function() { 
    $(this).attr({ 
     'data-valmsg-for': function (_, id) { return id.toString().replace('0', inputCount) } 
    }); 
}).end(); 

$("#Other").append(newDiv); 

$('form').data('validator', null); 
$.validator.unobtrusive.parse('form'); 

Ihrer Seite dieses jquery Skript hinzufügen });

Verwandte Themen