2016-08-30 3 views
0

i를 뷰 렌더링하기 위해 다음과 같습니다면도기 : IEnumerable <string> ViewBag 속성에서 드롭 다운을 만드는 방법?

public ActionResult CreateAlta() 
     { 
      ViewBag.RolesApp = new SQLRolerecord().GetAllRolesInApp(); 
      return View(); 
     } 

가 어떻게 ViewBag 속성 RolesApp에서 드롭 다운 메뉴를 생성 할 수 있습니까? GetAllRolesInApp()IEnumerable<string>를 반환하고 내 시도는 다음과 같습니다 :

<div class="form-group"> 
    <label class="col-sm-2 control-label">Role: </label> 
      <div class="col-sm-4"> 
      @Html.DropDownListFor("iroleeid", ViewBag.RolesApp, "--Select Role of User--"); 
      </div> 
</div> 

그러나 이것은 Html 헬퍼에 존재하지 않는 DropDownListFor 말하는 오류가 발생합니다.

감사합니다.

+0

IENumerable을 SelectList로 변환 할 수 있습니다. 귀하의 역할 모델은 어떻게 생겼습니까? 이드와 이름? – Max

+0

'string' 대신'SelectList'를 사용 하시겠습니까? 내 역할 모델은 IdentityRole 클래스이며 Identity 프레임 워크의 IdentityRole 클래스를 기반으로합니다. – ITWorker

+0

예, SelectListItem은 텍스트와 값을 포함하고, 표시하고자하는 문자열을'Text' 속성에 저장하면,'Value'에 고유 한 값을 저장하여 여러 개의 SelectListItem을 구별 할 수 있습니다. – Max

답변

2

당신이보기에 SelectListItem의 지금

var roles = new SQLRolerecord().GetAllRolesInApp() 
           .Select(f=>new SelectListItem { Value=f, Text = f}).ToList(); 
ViewBag.Roles= roles ; 

의 목록에 문자열의 목록을 변환 할 수 있습니다, 당신은 DropDownList 헬퍼 방법을 사용할 수 있습니다.

@Html.DropDownList("Roles") 

"Roles" 설정 nameid 및 속성 값을 갖는 요소를 선택하여 생성된다. 이들 이름을 다른 이름으로 사용하려면이 오버로드를 사용하십시오.

@Html.DropDownList("SelectedRole",ViewBag.Roles as List<SelectListItem>) 

이것은 우리가 값과 동일한 문자열 값 SelectListItem 개체의 텍스트를 설정하고 있기 때문에 "SelectedRole"

로 설정 이름과 ID 속성 값을 드롭 다운을 만들 것입니다, 당신의 선택 요소 옵션 값과 텍스트가 될 것입니다 same

+0

이 작업을 시도하면 'SelectedRole'키가있는 'IEnumerable '형식의 ViewData 항목이 없습니다. '페이지를로드 할 때. – ITWorker

+0

그건 불가능합니다! ** 두 번째 매개 변수 **를 사용 하시겠습니까? 두 번째 매개 변수는 옵션 항목을 명시 적으로 지정합니다. – Shyju

+1

마음은 절대 아닙니다. 내가 코드를 복사 할 때 ViewBag 속성의 이름을 엉망으로 만들었습니다. 왜냐하면 내 코드에서 RolesApp라고 불렀기 때문입니다. 답장을 보내 주셔서 감사 드리며 이는 정상적인 답변입니다. – ITWorker

2

DropDownListFor을 사용하려하지만보기 모델과 속성 (람다 사용)이 첨부되어 있어야합니다. 난 당신이 IENumerable<Role>SelectList로 변환 DropDownList

@Html.DropDownList("iroleeid", 
       new SelectList(ViewBag.RolesApp), 
       "--Select Role of User--", 
       new { @class = "form-control" }) 
+0

감사합니다. – ITWorker

1

를 찾고 있습니다 생각합니다.

컨트롤러 :

var selectList = new SqlRoleRecord().GetAllRolesInApp().Select(x => new SelectListItem { Value = x.Id, Text = x.Name }).ToList(); 
ViewBag.RolesApp = selectList; 

보기 :

@Html.DropDownListFor(x => x.SelectedRoleId, ViewBag.RolesApp, Model.SelectedRoleId) 

선택 사항 : 모델에 SelectedRoleId를 저장하는 속성을 추가 할 때

, 당신은 나중에 사용할 수 있습니다 귀하의 컨트롤러에. 예를 들어 데이터베이스의 사용자에게 역할을 바인드해야 할 때 유용합니다.


P. 100 % 작동하는지, 현재로서는 컴파일 할 수 없는지 확실하지 않습니다.

+0

그러나이 시도했지만 문자열에 ID 또는 이름에 대한 정의가 포함되어 있지 않다는 오류가 발생했습니다. 내 GetAllRolesInApp가 모델 목록이 아니라 문자열 목록을 반환하기 때문에 이것이라고 생각합니다. – ITWorker

+1

@ITWorker ID 및 이름은 예제입니다. 역할에서 해당 값을 텍스트 및 값으로 설정해야합니다. 문자열 목록 만있는 경우'Value = x.Id, '를 제거 할 수 있습니다. – Max

+0

고마워, 이제 알 겠어. – ITWorker