[asp.net-mvc] DropDownListFor Not 선택 값

편집 페이지 내에서 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. 이에 대한 두 가지 잠재적 인 이유는 다음과 같습니다.

  1. MyValuenull입니다. ViewModel에서 설정하지 않았습니다. 하나 만들기 MyOptionsSelected=true이 문제를 해결하지 것이다.
  2. 더 미묘하게도의 유형 은 의 유형MyValue다릅니다 MyOptions. 따라서 if MyValueis (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 속성 이름을 페이지에서 사용되는 다른 모델 변수 이름으로 변경하십시오.


답변

자신의 코드가 아닌지 확인하는 또 다른 방법은 페이지로드시 값을 변경하는 자바 스크립트 함수가 없는지 확인하는 것입니다. 이 모든 솔루션을 읽은 벽에 머리를 대고 몇 시간 후에 나는 이것이 나에게 일어나고 있음을 발견했습니다.