2017-01-08 3 views
0

Je suis en train de générer une liste comme suit-Liste <SelectListItem>() pour aide html DropDownListFor()

@using SkyTracker.Models 
@model SkyTracker.Models.Outlet 
@{ 
    var outletTypeList = new List<SelectListItem>(); 
    foreach (var item in ViewBag.OutletTypes) 
    { 
     //Exception Cannot implicitly convert type 'int' to 'string' 
     var newType = new SelectListItem { Text = item.OutletTypeName, Value = item.OutletTypeId }; 
     outletTypeList.Add(newType); 
    } 
} 



<form method="post" action="@(ViewBag.BaseUrl)OutletManagement/[email protected]"> 
    @Html.LabelFor(m => m.OutletTypeId, new { @class="required"}) 
    @Html.DropDownListFor(m => m.OutletTypeId, outletTypeList, new {required="required" }) 

</form> 

Mais je gettting une exception dans la boucle foreach. De l'aide?

Répondre

0

La propriété Value de SelectListItem est tyeof string donc si OutletTypeId est typeof int, puis utilisez Value = item.OutletTypeId.ToString().

Cependant ce code appartient au contrôleur, pas la vue, et idéalement vous devriez utiliser un modèle de vue qui contient une propriété IEnumerable<SelectListItem> OutletTypeList

public class OutletVM 
{ 
    [Required(ErrorMessage = "Please select an outlet type")] 
    public int? OutletTypeId { get; set; } // nullable to protect against under-posting attacks 
    public IEnumerable<SelectListItem> OutletTypeList { get; set; } 
    .... 
} 

et dans le contrôleur

OutletVM model = new OutletVM() 
{ 
    OutletTypeList = yourCollection.Select(x => new SelectListItem 
    { 
     Value = x.OutletTypeId.ToString(), 
     Text = x.OutletTypeName 
    }, 
    .... // set other properties of the view model 
}; 
return View(model); 

et la vue

@Html.DropDownListFor(m => m.OutletTypeId, Model.OutletTypeList, "Please select") 
@Html.ValidationMessageFor(m => m.OutletTypeId) 

Notez également que vous devez supprimer new {required="required" } qui est la validation côté client HTML5 uniquement et ajoutez un RequiredAttribute à la propriété à laquelle vous vous liez pour obtenir la validation côté client et côté serveur.

Voir également l'utilisation

@using (Html.BeginForm("Create", "OutletManagement", new { id = @ViewBag.RaId })) 

pour produire l'élément de forme