Bindung ListBox, mit einem Modell in MVC3
Mein Modell ist
public class SiteConfig
{
public SiteConfig()
{
}
public int IdSiteConfig { get; set; }
public string Name { get; set; }
public byte[] SiteLogo { get; set; }
public string Brands { get; set; }
public string LinkColour { get; set; }
public IEnumerable<SiteBrand> SiteBrands { get; set; }
}
und
public class SiteBrand
{
public int Id { get; set; }
public int SiteId { get; set; }
public int BrandId { get; set; }
public Brand Brand { get; set; }
public SiteConfig SiteConfig { get; set; }
}
public class Brand
{
public int BrandId { get; set; }
public string Name { get; set; }
public IEnumerable<SiteBrand> SiteBrands { get; set; }
}
Bin ich folgende Daten Base-first-Ansatz. Jeder SiteConfig Datensatz enthalten kann, die eine oder mehrere Marken. Also die Marke ist speichern in einer anderen Tabelle namens SiteBrand.
SiteBrand enthält die forign key-Referenz zu beiden SiteConfig(auf IdSiteConfig) und Brand(BrandId).
Wenn ich Schaffe eine SiteConfig ich will Sie zur Anzeige aller verfügbaren Marken als Listenfeld, wo Benutzer können wählen Sie eine oder viele Aufzeichnung(kann nicht wählen, jede Marke).
Aber wenn ich die binden meiner Sicht mit dem Modell, wie kann ich bind mein Listenfeld, um die Liste der Marken und wenn gebucht wird, wie bekomme ich den ausgewählten Marken.
Und ich habe zum speichern der SiteConfig Objekt-Datenbank mit den ausgewählten Elementen. Und das ist mein DB Diagramm.
Dies ist mein DAL speichert die db.
public SiteConfig Add(SiteConfig item)
{
var siteConfig = new Entities.SiteConfig
{
Name = item.Name,
LinkColour = item.LinkColour,
SiteBrands = (from config in item.SiteBrands
select new SiteBrand {BrandId = config.BrandId, SiteId = config.SiteId}).
ToList()
};
_dbContext.SiteConfigs.Add(siteConfig);
_dbContext.SaveChanges();
return item;
}
Kann jemand advide wie binden Sie das Listenfeld und Holen Sie sich die ausgewählten Elemente.
Dank.
InformationsquelleAutor Naresh | 2012-08-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen einer neuen Eigenschaft, um Ihre SiteConfig ViewModel vom Typ string-array. Wir verwenden Sie diese Option, um das Ausgewählte Element aus der
Listbox
wenn user Beiträge in dieser form.In Ihr action-Methode, Erhalten Sie eine Liste der
SiteBrands
und weisen dieSiteBrands
Eigenschaft der SiteConfig ViewModel-ObjektFür demo-Zwecke, die ich eben hart codiert, die Methode. Wenn Sie diese umsetzen, Sie können die Daten Aus den Data Access layer.
Nun in Ihrer Ansicht, die stark typisiert zu
SiteConfig
ViewModel,Nun, wenn der Benutzer die Beiträge dieses Formulars, erhalten Sie die Ausgewählten Elemente mit dem Wert in der
SelectedBrands
Eigenschaft im ViewModelWarum brauchen Sie die SiteBrands Sammlung beim erstellen einer Siteconfig ? Ich denke, Sie müssen die Ausgewählten Elemente aus der ListBox (das ist, was Sie gebeten, in der ersten Frage). Aber wenn du Rendern die gleiche Ansicht wieder, dann müssen Sie die übernahme der SiteBrands wieder vor der Rückkehr der viewmodel zurück zu der Ansicht, da HTTP stateless
Weil mein Create-Methode nimmt ein Objekt des Typs SiteConfig. Und meine db weiß nur über SiteBrands. Id nicht wissen, eine Sache über Ausgewählte ids. Wie ich schon in meiner Frage SiteBrand enthält Fremdschlüssel-Verweise auf site-id sowie Marken-id.
Sie müssen Lesen Sie die Ausgewählten Elemente ( die IDS) und übergeben Sie es auf Ihre Daten Zugreifen Schicht, die diese Daten speichert in Ihren back-end). Da ich nicht weiß, über Ihre data-access-layer kann ich nicht genau sagen, was zu tun ist
Gerade jetzt, ich habe meine DB Diagramm und Erstellen Methode. Könnten Sie bitte empfehlen Sie mir eine bessere Möglichkeit dies zu tun. Danke.
InformationsquelleAutor Shyju
Können Sie ein "ViewModel", auf dem sowohl die Website und Marke-Modell. Sie können dann binden Sie Ihre Ansicht auf das Modell. Dies würde ermöglichen es Ihnen, binden Sie alle Teil der Ansicht, um irgendeinen Teil der zugrunde liegenden Modelle.
Natürlich können Sie auch andere Informationen, die Ihrer Ansicht benötigen könnte (reduziert die Notwendigkeit von ViewBag).
InformationsquelleAutor JTMon