2015-11-11 10 views
5

enter image description herePopola RadioButtonList dalla tabella del database in asp.net mvc

Voglio creare una forma come sopra,

anche avere a popolare visualizzatore gruppi di utenti accodrding a UserGroups tavolo enter image description here

public partial class UserGroup 
{ 
    public string UserGroup_ID { get; set; } 
    public string UserGroupNameEn { get; set; } 
} 

Quindi popolare questi gruppi di utenti e ottieni i dati pieni Ho creato un nuovo modello (quindi può essere applicato alla vista (1a immagine))

ho seguito tesi Stack Overflow question 1 e question 2 per rendere questo

questo è classe controller per questo

[HttpGet] 
    public ActionResult ProductFields_Create() 
    { 
     var model = new ProductFields 
     { 
      LisGroups = GetUserGroupListEn() 
     }; 

     return View(model); 

    } 

    public MultiSelectList GetUserGroupListEn() 
    { 
     return new MultiSelectList(db.UserGroup.ToList(), "UserGroup_ID", "UserGroupNameEn"); 
    } 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult ProductFields_Create(ProductFields product_fields) 
    { 
     ........... 
    } 

questo è classe modello per prima immagine

public class ProductFields 
{ 
    public string ProductFieldID { get; set; } 
    public string ProductFieldNameEn { get; set; } 
    public string ProductFieldNameAr { get; set; } 
    public string ProdcutFieldDiscriptionEn { get; set; } 
    public string ProductFieldDiscriptionAr { get; set; } 

    public List<UserGroup> LisGroups { get; set; } 

    [Required] 
    public string SelectedGroupID { get; set; } 
} 

ViewPage per sopra vista

@model Project_Name.Models.ProductFields 

@using (Html.BeginForm()) 
{ 

    <fieldset> 
     <div class="form-horizontal">   

      @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 

      ..... 

      <div class="form-group"> 
      <div> 
       @Html.ValidationMessageFor(x => x.SelectedGroupID) 
       foreach (var group in Model.LisGroups) 
       { 
       <div> 
        @Html.RadioButtonFor(x => x.SelectedGroupID, group.UserGroup_ID, new { id = "emp" + group.UserGroup_ID }) 
        @Html.Label("emp" + group.UserGroup_ID, employee.Label) 
       </div> 
       } 

      </div> 

      </div> 

      <div class="form-group"> 
       <div class="col-md-offset-2 col-md-10"> 
        <input type="submit" value="Create" class="btn btn-default" /> 
       </div> 
      </div> 


     </div> 
    </fieldset> 
} 

ma qui sto ottenendo grandi errori con linee ondulate rosse

Il 'gruppo' nome non esiste nel contesto corrente

enter image description here

Impossibile convertire implicitamente il tipo 'System.Web.Mvc.MultiSelectList' a 'System.Collections.Generic.List'

enter image description here

+0

@StephenMuecke sì è, una volta che seleziono il gruppo A, dovrebbe passare Group As, ID – kez

risposta

4

Non hai bisogno di un MultiSelectList (che è una classe per l'uso nei metodi ListBox() e ListBoxFor()). E la ragione dell'errore è che la tua proprietà è List<UserGroup> LisGroups ma il tuo tentativo di assegnare il tipo di MultiSelectList ad esso.

cambiare il metodo GET per nota

[HttpGet] 
public ActionResult ProductFields_Create() 
{ 
    var model = new ProductFields 
    { 
     LisGroups = db.UserGroup.ToList(); 
    }; 
    return View(model); 
} 

Side: La proprietà potrebbe essere public IEnumerable<UserGroup> LisGroups { get; set; } e quindi eliminare l'uso non necessario di .ToList()

Poi nella vista

@foreach (var group in Model.LisGroups) 
{ 
    <div> 
     <label> 
      @Html.RadioButtonFor(x => x.SelectedGroupID, group.UserGroup_ID, new { id = "" }) 
      <span>@group.UserGroupNameEn</span> 
     </label> 
    </div> 
} 
+0

Im ancora ottenendo 'Il nome 'gruppo' non esiste nel curren t context' error – kez

+0

Vuoi dire nella visualizzazione? –

+0

sì nella pagina di visualizzazione cshtml, sto ancora ricevendo questo errore con le linee squiqqly rosse – kez