2017-01-03 2 views
0

Hallo Ich lerne MVC-Stil in ASP.NET zu programmieren. Ich versuche eine Combobox mit meinem PresentationModel zu füllen, irgendwie bleibt es leer.ASP.NET MVC PresentationModel Bindung an ComboBoxes bleibt leer

Ich benutze die ASP-Tag-Helfer:

Ansicht (Index.cshtml)

@model Week3_oef2_ITPro.PresentationModel.PMRegistration 

<h2>New Registration</h2> 
<h4>Registration</h4> 
<form asp-controller="Register" asp-action="" method="post"> 
    <table> 
     <tr> 
      <td>Organization</td> 
      <td class="form-group"> 
       <select asp-for="OrgId.Id" asp-items="@Model.Org" class="form-group" /> 
      </td> 
     </tr> 
     <tr><td><input type="submit" /></td></tr> 
    </table> 
</form> 

PresentationModel (PMRegistration.cs)

public class PMRegistration 
{ 
    public Organization OrgId { get; set; } 
    public List<SelectListItem> Org { get; set; } 
} 

Model (Organization.cs)

public class Organization 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 

} 

Daten (Wo alle Objekte initialisiert werden)

public class Data 
{ 
    private static List<Session> sessions = new List<Session>(); 
    private static List<Organization> organizations = new List<Organization>(); 
    private static List<Device> devices = new List<Device>(); 

    static Data() 
    { 
     organizations.Add(new Organization() { Id = 1, Name = "Howest" }); 
     organizations.Add(new Organization() { Id = 2, Name = "Vives" }); 
     organizations.Add(new Organization() { Id = 3, Name = "HoGent" }); 
     organizations.Add(new Organization() { Id = 4, Name = "HoLimburg" }); 
     organizations.Add(new Organization() { Id = 4, Name = "De blauwe smurfen" }); 

     devices.Add(new Device() { Id = 1, Name = "Laptop" }); 
     devices.Add(new Device() { Id = 2, Name = "Tablet" }); 
     devices.Add(new Device() { Id = 3, Name = "Apple Watch" }); 
    } 

    public static List<Device> GetDevices() 
    { 
     return devices; 
    } 

    public static List<Organization> GetOrganizations() 
    { 
     return organizations; 
    } 
} 

Controller (RegisterController.cs)

public class RegisterController : Controller 
{ 
    // GET: /<controller>/ 
    [HttpGet] 
    public IActionResult Index() 
    { 
     PMRegistration pm = new PMRegistration(); 
     pm.OrgId = new Organization(); 
     pm.Org = ConverToListItems(Data.GetOrganizations()); 
     return View(pm); 
    } 
    #region methodes 
    private List<SelectListItem> ConverToListItems(List<Organization> data) 
    { 
     List<SelectListItem> items = new List<SelectListItem>(); 
     foreach (var item in data) 
     { 
      items.Add(new SelectListItem() { Text = item.Name, Value = item.Id.ToString() }); 
     } 
     return items; 
    } 
    #endregion 

} 
+0

wo ist der Code, in dem Sie ein Objekt von' PMRegistration' Klasse sind vorbei? – Shyju

+0

Forgot zu meinem Controller zu zeigen, eine Sekunde –

+0

@Shyju ist es jetzt hinzugefügt, ich vergaß, traurig –

Antwort

1

Ihre HTML-Markup für das SELECT-Element ist falsch. Das SELECT-Element benötigt ein schließendes Tag.

Es sollte für `Index` Aktionsmethode

<select asp-for="OrgId.Id" asp-items="@Model.Org" class="form-group"></select> 
+0

Oh Gott, ich habe gerade 4 Stunden in diesem verschwendet. Danke, ich kann jetzt schlafen :) Einen schönen Tag noch –