2017-01-08 2 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) 

또한를 제거해야합니다.은 HTML5 클라이언트 측 유효성 검사이며 클라이언트 바인딩과 서버 측 유효성 검사를 모두받을 수 있도록 바인딩 속성에 RequiredAttribute을 추가하십시오.

또한 폼 요소를 생성

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

사용을 고려