HtmlHelper.DropDownListFor
개체에서 선택된 데이터를 확인하는 방법에 대해 현재 분투하고 있습니다. 문제는 모델을 고유하게 식별 할 수있는 모델 클래스의 단일 속성이 없다는 것입니다.DropDownListFor 값 필드 - 속성 조합 식별자
다음은 내 모델 및 viewmodel 클래스뿐 아니라보기에서 HtmlHelper.DropDownListFor
호출의 샘플입니다.
public class MyModel
{
public int ParentId { get; set; } // combined with ChildId is the unique identifier
public int ChildId { get; set; } // see above
public string Name { get; set; } // not unique
}
public class MyViewModel
{
public IEnumerable<MyModel> MyModels { get; set; }
public <???> SelectedItem { get; set; }
}
@Html.DropDownListFor(m => m.SelectedItem, new SelectList(Model.MyModels, "DataValueField", "Name"))
문제는 여기에 MyModel
의 유일한 독특한 idenfier이 ParentId
및 ChildId
의 조합 것입니다. 그러면 선택한 항목을 고유하게 식별하기 위해 데이터를 검색하는 가장 좋은 방법은 무엇입니까?
ModelUniqueIdentifier = ParentId * 100 + ChildId
그러나 나는이에 MyViewModel.SelectedItem
을 설정하려면이 논리를 적용 할 수있는 방법이 표시되지 않습니다 :
제출할 양식을 트리거하는 포스트 백이있는 경우 다른 처리를 수행하기 위해 모델의 SelectedItem
속성에서 선택한 값을 가져올 수 있어야합니다. 그러나 1 차원의 "DataValueField"
으로, 나는 이것을 달성하는 최선의 방법이 확실하지 않습니다.
이것을 피하는 가장 분명한 방법은 대리 키를 단일 식별자로 데이터에 삽입하는 것입니다. 그러나이 특정 데이터를 사용하면이 시점까지 훌륭한 작업을 해오 고있는이 명백한 복합 자연 키가 있습니다. 내가 데이터에 대리 키를 추가했다 경우이 작업 할 것
ParentId ChildId Name
7 3 Name1
4 8 Name2
5 3 Name3
4 6 Name4
:
SurrogateId ParentId ChildId Name
0 7 3 Name1
1 4 8 Name2
2 5 3 Name3
3 4 6 Name4
이 작동합니다 반면를 좋아
그래서 두 차원 데이터 보인다 기본 테이블, 모델 및 많은 양의 참조 코드를 변경해야하므로이 대리 키를 추가 할 필요가 없다면 오히려하지 않을 것입니다.
어떤 생각이나 아이디어가 있습니까? 미리 감사드립니다.
귀하가 수락 한 답변으로는 거의 문제를 해결할 수 없습니다. 포스트 백에서 모델을 바인딩 할 수 없으며'Request.Form'에서 가져온 경우 값을 어떻게 'ParentId' 및'ChildId' 값으로 변환하겠습니까? 글 머리 기호를 물고 테이블을 고유 한 ID 필드로 지정하기 위해 데이터베이스를 수정하는 것이 좋지만 [pairing function] (http://en.wikipedia.org/wiki/Pairing_function#Cantor_pairing_function)을 사용할 수 있습니다. –
데이터의 서로 게이트 키, 차례로 모델 클래스 –