2012-05-03 3 views
0

MVC3에서 DropDownListFor를 사용하면 첫 번째 매개 변수가 문자열이어야합니까? 다음과 같은 설정이 있습니다 :MVC3 DropDownListFor 선택한 속성을 설정하지 않음

@Html.DropDownListFor(m => m.MyListItemId, Model.MyListItems, 
    new Dictionary<string, object> 
    { 
     { "style", "width:120px" }, 
     { "data-type", "myList" } 
    }) 

여기서 m.MyId는 내 viewmodel의 int입니다. 내 드롭 다운 목록에서 선택한 항목을 변경하고 렌더링 된 html을 검사 할 때 "selected"속성이 새로 선택된 항목으로 설정되지 않는 문제가 있습니다. 이 문제는 jquery 복제 함수를 사용하여 해당 행을 복사 할 때 새 선택 행으로 복사 할 목록이 필요합니다. 아이디어?

업데이트 - viewmodel의 속성을 문자열로 변경해도 아무런 차이가 없습니다. 이것은 mvc dropdownlistfor의 버그입니까? 비슷한 문제에 대한 기사를 많이 읽었지만이 경우 작동하는 솔루션을 찾지 못하는 것 같습니다. LINEITEM이 방법

+1

질문에 대한 오해 여부를 잘 모르겠습니다. 하지만 jQuery 복제를 사용하여 선택 목록을 복제하는 경우 옵션을 다시 선택해야합니다. [여기] 질문을 참조하십시오 (http://stackoverflow.com/questions/3776270/jquery-clone-doesnt-copy-select-dom -properties? answertab = oldest) 및 [여기] (http://stackoverflow.com/questions/3861729/copy-clone-dropdown-list-with-selected-option-in-jquery)를 참조하십시오. – pjumble

+0

감사합니다! 나는 그것을 알지 않았다! 복제에 도움이 될만한 것이 있다면, 지금 시도해 보겠습니다. 난 아직도 궁금 하긴하지만 왜 드롭 다운 목록에서 새 항목을 선택하면 렌더링 된 HTML에서 값을 변경하지 않는 드롭? –

+0

그건 내가 찾고있는 것이 아니에요. 내가 이전 행에서 선택한 값을 복사 할 수 있지만 주요 문제는 선택된 선택한 값으로 표시되어 있지 않은 것입니다 –

답변

0

없음에 전달

var myListItems = _myRepository.GetAll(); 
model.MyListItems = new SelectList(myListItems, "Id", "Name", lineItem.myListItemId); 
model.MyListItemId = lineItem.myListItemId; 

가 선택한 값 속성이 문자열 일 필요는 없으며, 그것이 INT 될 수 있습니다 내 목록 내 코드에서 설정이 얼마나입니다. 값이 문자열로 변환 될 수 있으면 작동해야합니다 (따라서 선택된 값 유형은 Guid, int, bool 등일 수 있습니다).

페이지의 경로에 선택한 값 모델 속성과 같은 이름의 경로 매개 변수가있는 경우 가끔 문제가 발견되었습니다. 예를 들어, 다음 사항을 고려하십시오

route: "/establishments/{establishmentId}/edit" 

모델 :

public class MyViewModel 
{ 
    public int EstablishmentId { get; set; } 
    public SelectListItem[] Establishments { get; set; } 
} 

보기 :이 코드

@Html.DropDownListFor(m => m.EstablishmentId, Model.Establishments) 

, 드롭 다운 목록의 선택 값은 항상 것에 어떤 establishmentId입니다 경로. 따라서 경로가/establishments/12/edit 인 경우 드롭 다운에서 값 12가 선택됩니다. route 매개 변수와 model 속성 대소 문자가 일치하지 않아도 상관 없습니다.

MVC 소스 코드를 다운로드하고 MyDropDownListFor라는 자체 DropDownListFor 복사본을 만든 다음 코드를 단계별로 실행하여 무슨 일이 일어 났는지 알아 냈습니다. MVC3에 여전히 문제가 있다면, 같은 것을하는 것이 좋습니다. 이것이 서버 코드와 관련된 문제인지 또는 jquery 복제 항목인지 파악해야합니다.

+0

그 좋은 생각, 내가 mvc 코드를 다운로드 한, 내가 선택 목록 확장 클래스에 추가 된 의존 MvcResources와 같은 것들은 내부 클래스에 액세스 할 수없는 컴파일 오류가 발생합니다 ... 이것을 어떻게 디버그 할 수있는 상태로 만들 수 있습니까? –

+0

그것은 몇 가지 refs를 가지고 있습니다. 예를 들어 예외가있을 때, 나는 자원 호출을 내 자신의 문자열로 바꿨다.내부 클래스와 메소드를 복사해야한다. 그러나이 HTML 도우미가 앱 코드의 컨텍스트에서 어떻게 작동하는지 실제로 이해할만한 가치가 있다고 믿으십시오. – danludwig

+0

고마워! 디버깅을했는데 유용하지 않은 것을 찾지 못했습니다. 새 항목을 선택하면 렌더링 된 HTML에서 선택한 항목이 이전 항목으로 유지됩니다. –

관련 문제