Es gibt ein paar Schritte.
- Definieren Sie Ihre entityies
- Konfigurieren eines ManyToManyRelationship
- die MVC contollers und Ansichten erstellen.
die Entity
definieren
public class Person
{
public int Id {get; set;}
/// other fields
public virtual ICollection<Equipment> Equipment { get; set; }
}
public class Equipment
{
public int Id {get; set;}
public string Name {get;set;}
/// other fields
public virtual ICollection<Person> People { get; set; }
}
Die DbContext Klasse
public MyContext : DBContext
{
DbSet<Person> People { get; set; }
DbSet<Equipment> Equipment {get; set;}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>() // configure the many to many relationship.
.HasMany(m=>m.Equipement) // not required but I like to be explicit
.WithMany(m=>m.People).
.Map(m=>m.MapLeftKey("Person_Id")
.MapRightKey("Equipement_Id)
.ToTable("PersonEquipment");
}
}
Ich mag die Verwendung einer View-Modell public class CreatePersonViewModel { öffentliche Person Person {get Objekte per view ; set;} public IEnumerable Ausrüstung {get; set;} public int [] selectedEQuip ment {get; set;} // dies wird in der Post zurückkommen }
Der Controller
public class PersonController: Controller
{
public ActionResult CreatePerson()
{
using (var db = new MyContext())
{
var newPerson = new CreatePersonViewModel
{
person = new Person(),
equipment = db.Equipement.ToList()
}
return View(newPerson)
}
}
}
The View
ich die gesamte Ansicht wird nicht tun, aber das ist ziemlich selbsterklärend. Es gibt viele Beispiele dafür auf dieser Seite. Der Schlüssel besteht darin, das Geräte-Array so einzurichten, dass Sie die Geräte-IDs zurückbekommen, wenn Sie sie benötigen. Ich werde ASPX für die Ansicht verwenden, aber Sie können Razor
<%
foreach (var e in Model.Equipement)
{%>
<input name="selectedEQuipment" type="checkbox" value=<%: e.Id %> />
//// display the label for the checkbox anyway you want with whatever markup you need.
<%}
%>
...
<input type="submit" />
Das Schlüssel-Stück ist, dass Sie alle Eingänge gleich ist und der Name Spiel nennen, was in dem Ansichtsmodell ist und dass all dies ist innerhalb einer Html.BeginForm(), einschließlich der Schaltfläche zum Senden.
Die Http Beitrag Metnod im Controller
[HttpPost]
public ActionResult CreatePerson(CreatePersonViewModel viewModel)
{
using (var db = new MyContext())
{
// either use client side validation or server side validation
db.People.Add(viewModel.person);
// make sure the Equipment array in the viewModel is not null
var equipment = from o in db.Equipment where viewModel.selectedEquipment.Contains(o.Id);
foreach (var e in equipment)
{
viewModel.Equipment.Add(e);
}
db.SaveSchanges();
// go somewhere using Redirect of some sort
}
}
[Was haben Sie versucht] (http://mattgemmell.com/2008/12/08/what-have-you-tried/)? –
Hi, ja ich habe aber ich weiß nicht, wie man dynamische Checkboxen zurückliest. – user1012500
Das beantwortet meine Frage nicht: Was hast du probiert? Wie sieht dein aktueller Code aus? Welche besonderen Schwierigkeiten haben Sie erlebt? –