2017-01-08 16 views
0

私はfollows-一覧<SelectListItem>()()

@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> 

としてリストを生成しようとしています。しかし、私は、foreachループで例外をgetttingよ。どんな助け?

答えて

0

SelectListItemValueプロパティはOutletTypeIdはtypeof演算int、そしてValue = item.OutletTypeId.ToString()を使用している場合はそうtyeof stringです。そのコードは、コントローラではなく、ビューに属し、理想的にあなたがプロパティを含むビューモデルを使用する必要がありますしかし

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; } 
    .... 
} 

とコントローラ

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); 

と中でIEnumerable<SelectListItem> OutletTypeList表示

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

new {required="required" }これはHTML5クライアント側の検証のみで、バインドするプロパティにRequiredAttributeを追加して、クライアント側とサーバー側の両方の検証を取得します。

は、フォーム要素を生成する

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

の使用を検討して