2016-07-11 2 views
0

나는 옵션 목록이 있습니다마지막 목록에서 특정 항목과 @ Html.DropDownListFor를 정렬하는 방법

ATI

FICA

기타

FATCA

SOFP을

"기타"가 l이되도록 주문을 수정하고 싶습니다. 마지막이야, 가능하니? 내가있는 OrderBy 시도

@Html.DropDownListFor(x => x.DocumentTypeId, Model.DocumentTypes, new { style = "width:174px", @title = "Document Type" }) 

하지만 이것은 단지 알파벳 순으로 정렬 :

내 코드는 다음과 같습니다.

편집 :

이 내가 나열된 몇 가지보다 더 많은 문서 유형이며, 그들은 이전의 모든 조건에 따라 DB 테이블에서 호출됩니다. 아무 것도 하드 코드되지 않습니다.

+0

왜 jquery로 마지막 옵션을 추가하지 않는가? 그것은 가장 쉬운 해결책이 될 것입니다. – Gravity

답변

1

주문 귀하의 요소

당신은 목록의 마지막에 당신의 "주문"요소를 배치 할 것 인 OrderBy() 메소드 호출을 통해 특정 요소에 기반을 정렬 고려할 수

:

<!-- This will maintain your order, except place "ORDER" at the end of the list --> 
@Html.DropDownListFor(x => x.DocumentTypeId, Model.DocumentTypes.OrderBy(d => d == "ORDER"), ...) 

see an example of this in action here 수 있습니다.

기타 고려 사항 일반적으로

, 당신은 직접 뷰 내에서 논리의 유형을 포함하지 않도록해야합니다.위에서 설명한 것과 비슷한 OrderBy() 호출을 수행하여 명시 적으로 사용하려는 값의 순서를 설정하거나보기에 전달하기 전에 모델 자체에서이를 처리하는 것이 좋습니다.

이와 같은 작업이 필요 내 프로젝트에서
// Order prior to passing to the View 
Model.DocumentTypes = Model.DocumentTypes.OrderBy(d => d == "ORDER").ToList(); 
return View(Model); 
1

DropDownListFor의 사용자 지정 구현을 구현해야합니다.

몇 가지 예를 보려면 here (stackoverflow)을 시작할 수 있습니다.

1

가장 쉬운 해결책은 네 가지 옵션을 사용하여 서버 쪽에서 정렬 된 목록을 만든 다음 단순히 목록의 마지막 항목으로 기타를 추가하는 것입니다. 그런 다음 이미 준비된 모델에 데이터를 전달하고 뷰에서 HTML을 정상적으로 렌더링하도록합니다.

+0

감사합니다. 목록이 채워지는 곳을 찾았고 목록이 완전히 채워진 다음 항목을 제거한 다음 목록에 마지막으로 넣은 항목을 다시 추가했습니다. –

1

나는 별도의 C# 파일을 만들고 그래서 같은 방법 작성 : 당신의 컨트롤러에서 다음

public static List<SelectListItem> lstOptionsInOrder() 
{ 
    List<SelectListItem> lstOptions = new List<SelectListItem>(); 

    List<string> lstOptionsOrder = new List<string>() {"ATI", "FICA", "FATCA", "SOFP", "OTHER"}; 

    var optionsInOrder = db.DocumentTableName.OrderBy(x => lstOptionsOrder.IndexOf(x.DocumentTypes)); 

    foreach(var option in optionsInOrder){ 
     SelectListItem item = new SelectListItem() {Text = option.DocumentTypes, Value = option.ID.ToString()}; 
     lstOptions.Add(item); 
    } 

return lstOptions; 
} 

을 :

ViewBag.lstOrderOptions = /*NameOfC#File*/.lstOptionsInOrder(); 

다음보기에서 :

@Html.DropDownList("lstOrderOptions", null, "-- Select Option --", htmlAttributes: new { @class = "form-control"}) 
관련 문제