2016-09-29 7 views
-1

편집 모드에서 3 개의 dropdownlistfor가 있습니다. DDLFor에서 올바른 텍스트를 채울 수 있지만 제출시 ID가 0으로 설정되어 있지만 다른 팀을 선택하는 경우 그것은 올바른 id와 함께 올라오고있다.Dropdownlistfor 선택한 텍스트 및 값 ASP.NET MVC

public List<SelectListItem> TeamOneList { get; set; } 
public string SelectedTeamOne { get; set; } 
.... //remaining properties for DDL's.......... 

컨트롤러

List<SelectListItem> TeamOneList = new List<SelectListItem>(); 
foreach (var item in db.Teams) 
{ 
    TeamOneList.Add(new SelectListItem { Text = item.TeamName, Value = item.TeamId.ToString() }); 
} 
string SelectedTeamOne = db.Teams.Where(o => o.TeamId == fixture.TeamOneId).Select(s => s.TeamName).Single(); 

보기 내 코드

의 ViewModel되어 다음

@Html.DropDownListFor(model => model.TeamOneId, Model.TeamOneList, Model.SelectedTeamOne, new { @class = "form-control" }) 
+0

더 간단 DropDownListFor '의 세번째 매개 변수()'라벨이 ('null' 옵션)

var model = new yourModelName { TeamOneList = db.Teams.Select(x => new SelectListItem> { Value = x.TeamId.ToString(), Text = x.TeamName }), SelectedTeamOne = fixture.TeamOneId // no need to make a database call }; return View(model); 

를 사용하거나 할 수 있습니다. ''Model.SelectedTeamOne'이 아닌''을 선택하십시오. –

+0

둘째, 'TeamName' 속성에 바인딩하지만 옵션 값은'TeamId' 속성을위한 것입니다. '.Select (s => s.TeamId)'이어야합니다 ('TeamId'가'int'로 보이기 때문에'SelectedTeamOne'도'string'이 아닌'int'이어야합니다) –

+0

편집 모드에서 나는 Stephen – user3543878

답변

1

귀하가 TeamTeamId 속성을 기준으로 옵션 value 속성을 생성하지만이 설정 SelectedTeamOne 값이 TeamName이라는 이름 속성을 기반으로하므로 SelectedTeamOne 값이 옵션과 일치하지 않으므로 첫 번째 옵션 (null 레이블 옵션)이 선택됩니다 (무언가가 있어야하므로).

하지만 SelectedTeamOne은 그래서 실제로 당신 만 null 값으로 옵션을 선택할 때 당신이 그것을 선택하는 표시와 같은 텍스트로 null 라벨 옵션을 생성하는 (실제로 드롭 다운리스트에서 같은 이름의 두 번째 옵션이 있습니다).

@Html.DropDownListFor(model => model.SelectedTeamOne, Model.TeamOneList, "-Please select-", new { @class = "form-control" }) 

에 뷰의 코드를 변경 한 다음이 TeamId 따라서 귀하의 SelectedTeamOne 속성도해야의 typeof int입니다 나타납니다

SelectedTeamOne = db.Teams.Where(o => o.TeamId == fixture.TeamOneId).Select(s => s.TeamId).Single(); 

참고 컨트롤러 코드를 변경하려면 필요 int이 아니라 string

public int SelectedTeamOne { get; set; } 

또한, 당신은 단순히,

var model = new yourModelName 
{ 
    TeamOneList = new Selectist(db.Teams, "TeamId", "TeamName"), 
    SelectedTeamOne = fixture.TeamOneId // no need to make a database call 
}; 
return View(model); 
+0

Stephen에게 감사드립니다. "-Please Select- "옵션 DDLFor에서 DDLFor의 실제 값을 표시하여 사용자가 DDLFor에서 사용 가능한 옵션을 선택하여 값을 변경할지 여부를 결정할 수 있습니다. – user3543878

+0

의미가 무엇인지 이해할 수 없습니다. 'fixture.TeamOneId '가'5'이고'SelectedTeamOne'도 5 '가 될 것이고'TeamId = 5'로'Teams'에 행이 ​​있다면보기를 생성 할 때 그 옵션이 선택 될 것입니다. '실험실 el 옵션을 사용하고,'@Html.DropDownListFor (model => model.TeamOneId, Model.TeamOneList, 새 {@class = "form-control"})'레이블 옵션을 생성하지 않습니다. –

+0

그러나 왜 당신이'SelectedTeamOne = db.Teams.Where (o => o.TeamId == fixture.TeamOneId)를 가지고 있는지 분명하지 않습니다 .Select (s => s.TeamId) .Single();'- 무의미한 추가 데이터베이스 호출 대신에'SelectedTeamOne ='fixture.TeamOneId'를 사용하십시오. (응답을 편집 할 것입니다.) –