2010-01-08 1 views
2

이 질문은 ASP.NET MVC 2 RC (12 월 하락)와 관련이 있습니다. 기본 문제는 기본 선택된 값으로 드롭 다운 목록을 만들 때 "selected"속성이 HTML로 렌더링되지 않거나 잘못된 옵션에 기인한다는 것입니다. 여기 SelectListItem이 명시 적으로 true로 설정된 경우에도 선택되지 않았습니다.

public static Dictionary<int, string> MonthOfBirth 
    { 
     get 
     { 
      Dictionary<int, string> months = new Dictionary<int, string>(); 
      for (int i = 0; i <= 11; i++) 
      { 
       months.Add(i, CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]); 
      } 
      return months; 
     } 
    } 

이 SelectListItems의 목록을 작성하기 위해 확장 도우미입니다 : 여기

일부 값을 생성하는 기능 [AttributeService 클래스]입니다 :

여기

잘못된 옵션 문제를 설명하는 몇 가지 코드입니다
public static List<SelectListItem> ToSelectList<T>(
     this IEnumerable<T> enumerable, 
     Func<T, string> text, 
     Func<T, int> value, 
     string defaultOption 
     ) 
    { 
     var items = enumerable.Select(x => new SelectListItem 
     { 
      Text = text(x), 
      Value = value(x).ToString(), 
      Selected = false 
     }).ToList(); 

     items.Insert(0, new SelectListItem 
     { 
      Text = defaultOption, 
      Value = "-1", 
      Selected = true 
     }); 

     return items; 
    } 

이 조각은 위의 두 함께 묶어 :

public List<SelectListItem> MonthOfBirthList 
    { 
     get 
     { 
      return AttributeService.MonthOfBirth.OrderBy(x => x.Key).ToSelectList(x => x.Value, x => x.Key, 
               "Month"); 
     } 
    } 

첫 번째 스 니펫은 다양한 클래스에 있고 세 번째 스킨은 내 ViewModel에 있으며 컨트롤러는 뷰에 그냥 쏟아 붓습니다. 그래서 내보기에 그때가 내 확장 방법은 기본 값으로, 위치 인덱스 0에 기본 SelectListItem를 추가하고 = true로 선정

<%=Html.DropDownListFor(x=>x.MonthOfBirth, Model.MonthOfBirthList, new { @class = "panel_4_month" })%> 

참고. 모델에 포함 된 것을보기 위해 컨트롤러에 중단 점을 배치하면 목록이 올바르게 정렬되고 올바른 옵션이 선택으로 설정됩니다. 다음

<select class="panel_4_month" id="MonthOfBirth" name="MonthOfBirth"> 
    <option value="-1">Month</option> 
    <option selected="selected" value="0">January</option> 
    <option value="1">February</option> 
    <option value="2">March</option> 
    etc... 
</select> 

차 질문 내 코드가 잘못 여부 또는 HTML 렌더러에 버그가 있는지 여부 : 나는 실제로 생각 얻을

HTML이 무엇입니까? 이것이 충분한 정보가 아닌 경우 어딘가에 샘플 코드가있는 VS28K 솔루션을 업로드하게되어 기쁩니다. 감사.

+0

HTML이 정상적으로 보입니다. 별로 도움이 안된다. 알아, 미안해. – graphicdivine

답변

3

컨트롤러 방법을 볼 수 없지만 문제가 있다고 생각됩니다. 컨트롤러에 다음을 설정하면 선택한 월이 표시됩니다.

public ActionResult Edit(string id) 
{ 
    User myModel = UserServiceFactory.GetUser(id); 
    myModel.MonthOfBirth = -1; 
    return View(myModel); 
} 
+1

아하 - 나는 지금 당장 그 모델이 기본값을 제공 할 것으로 기대한다고 생각한다. - 선택된 selectlistitem을 선택된 플래그로 설정하는 것이 선택된 플래그를 설정한다고 가정했지만. 대단히 감사합니다! – Reza