편집 페이지 내에서 DropDownListFor 도우미 메서드를 사용하고 있는데 지정한 값을 선택하는 데 운이 없습니다. Stackoverflow 에서 비슷한 질문 을 발견했습니다 . 제안 된 해결 방법은 “보기 코드에서 SelectList 채우기”입니다. 문제는 이미 이것을 시도했지만 여전히 작동하지 않는다는 것입니다.
<%= Html.DropDownListFor(model => model.States, new SelectList(Model.States.OrderBy(s => s.StateAbbr), "StateAbbr", "StateName", Model.AddressStateAbbr), "-- Select State --")%>
중단 점을 설정하고 model.AddressStateAbbr의 존재 (및 유효성)를 확인했습니다. 내가 무엇을 놓치고 있는지 잘 모르겠습니다.
답변
한 시간 동안 조사한 결과 선택한 항목이로 설정되지 않는 문제를 발견했습니다 DropDownListFor
. 그 이유는 모델의 속성과 동일한 ViewBag의 이름을 사용하고 있기 때문입니다.
예
public class employee_insignia
{
public int id{get;set;}
public string name{get;set;}
public int insignia{get;set;}//This property will store insignia id
}
// If your ViewBag's name same as your property name
ViewBag.Insignia = new SelectList(db.MtInsignia.AsEnumerable(), "id", "description", 1);
전망
@Html.DropDownListFor(model => model.insignia, (SelectList)ViewBag.Insignia, "Please select value")
선택한 옵션은 드롭 다운 목록으로 설정되지 않지만 ViewBag의 이름을 다른 이름으로 변경하면 선택한 옵션이 올바르게 표시됩니다.
예
ViewBag.InsigniaList = new SelectList(db.MtInsignia.AsEnumerable(), "id", "description", 1);
전망
@Html.DropDownListFor(model => model.insignia, (SelectList)ViewBag.InsigniaList , "Please select value")
답변
시험:
<%= Html.DropDownListFor(
model => model.AddressStateAbbr,
new SelectList(
Model.States.OrderBy(s => s.StateAbbr),
"StateAbbr",
"StateName",
Model.AddressStateAbbr), "-- Select State --")%>
또는 Razor 구문 :
@Html.DropDownListFor(
model => model.AddressStateAbbr,
new SelectList(
Model.States.OrderBy(s => s.StateAbbr),
"StateAbbr",
"StateName",
Model.AddressStateAbbr), "-- Select State --")
식 기반 도우미는 SelectList에서 SelectListItems의 Selected 속성을 존중하지 않는 것 같습니다.
답변
당신이 제대로 일을하고 모델을 사용하는 경우 – 모든 ViewBag의 괴물과는 달리 – 여전히 문제를보고 때문입니다 @Html.DropDownListFor(m => m.MyValue, @Model.MyOptions)
일치하지 않을 수 MyValue
는에있는 선택과 함께 MyOptions
. 이에 대한 두 가지 잠재적 인 이유는 다음과 같습니다.
MyValue
null입니다. ViewModel에서 설정하지 않았습니다. 하나 만들기MyOptions
이Selected=true
이 문제를 해결하지 것이다.- 더 미묘하게도의 유형 은 의 유형 과
MyValue
다릅니다MyOptions
. 따라서 ifMyValue
is(int) 1
이지만MyOptions
패딩 된 문자열 목록 인{"01", "02", "03", ...}
경우 분명히 아무것도 선택하지 않을 것입니다.
답변
이 질문을 다루지는 않지만 미래의 Google 사용자가 내 생각 경로를 따를 경우 도움이 될 수 있습니다.
다중 선택을 원했고 DropDownListFor 의이 속성 해킹이 자동 선택되지 않았습니다.
Html.DropDownListFor(m => m.TrainingLevelSelected, Model.TrainingLevelSelectListItems, new {multiple= "multiple" })
대신 모든 것이 작동하도록 만든 ListBoxFor 를 사용해야 했습니다.
Html.ListBoxFor(m => m.TrainingLevelSelected, Model.TrainingLevelSelectListItems)
답변
나는 또한 비슷한 문제가 있으며 다음과 같이 해결하고
컨트롤러의 model.States 속성을 선택해야하는 항목으로
model.States = “캘리포니아”
그러면 기본값으로 “California”가 표시됩니다.
답변
이 문제는 일반적입니다. viewbag 속성 이름을 페이지에서 사용되는 다른 모델 변수 이름으로 변경하십시오.
답변
자신의 코드가 아닌지 확인하는 또 다른 방법은 페이지로드시 값을 변경하는 자바 스크립트 함수가 없는지 확인하는 것입니다. 이 모든 솔루션을 읽은 벽에 머리를 대고 몇 시간 후에 나는 이것이 나에게 일어나고 있음을 발견했습니다.
