간단한 Html.DropDownListFor ()를 작성하는 방법?


133

ASP.NET MVC 2에서는 정적 옵션을 제공하는 매우 간단한 드롭 다운 목록을 작성하고 싶습니다. 예를 들어 "빨간색", "파란색"및 "녹색"중 하나를 선택하고 싶습니다.

답변:


188

이 MSDN 기사Stack Overflow에 대한 사용법 예제를 참조하십시오 .

Linq / POCO 클래스는 다음과 같습니다.

public class Color
{
    public int ColorId { get; set; }
    public string Name { get; set; }
}

그리고 다음 모델이 있다고 가정 해 봅시다.

public class PageModel 
{
   public int MyColorId { get; set; }
}

마지막으로 다음과 같은 색상 목록이 있다고 가정 해 봅시다. Linq 쿼리, 정적 목록 등에서 올 수 있습니다.

public static IEnumerable<Color> Colors = new List<Color> { 
    new Color {
        ColorId = 1,
        Name = "Red"
    },
    new Color {
        ColorId = 2,
        Name = "Blue"
    }
};

보기에서 다음과 같이 드롭 다운 목록을 작성할 수 있습니다.

<%= Html.DropDownListFor(n => n.MyColorId, 
                         new SelectList(Colors, "ColorId", "Name")) %>

1
정말 분명합니다. IEnumerable <Color>을 코드에 어디에 넣어야하는지 알고 싶습니다. 나는 그것이 질문으로 어리석은 것처럼 보이지만 나는 매우 길을 잃고 새로운 것을
안다

7
걱정 마세요 친구 나는 그것이 어떻게 느끼는지 압니다. :) 첫 번째 질문에서 제안한 것처럼 코드로 만들 정적 목록입니까, 아니면 데이터베이스에서이 목록을 가져 옵니까?
Evan Nagle

데이터베이스를 손상시키지 않는 4 개의 옵션을 포함하는 정적 목록
Rinesse

6
"HtmlLists"또는 정적 클래스를 작성하십시오. 정적 클래스를 System.Web.Mvc 네임 스페이스에 배치하십시오. 정적 클래스에서 IEnumerable <Color> 색상의 정적 목록을 추가하십시오. 그런 다음 뷰에서 HtmlLists.Colors를 호출하여 참조 할 수 있습니다. 이해가 되길 바랍니다. 알려주세요. :)
Evan Nagle

2
나는 그것을하는 방법을 몰랐다 : ' viewModel의 귀인에서 liste의 결과.
나는

61
<%: 
     Html.DropDownListFor(
           model => model.Color, 
           new SelectList(
                  new List<Object>{ 
                       new { value = 0 , text = "Red"  },
                       new { value = 1 , text = "Blue" },
                       new { value = 2 , text = "Green"}
                    },
                  "value",
                  "text",
                   Model.Color
           )
        )
%>

또는 수업을 쓰지 않을 수도 있습니다. 이와 같은 것을 뷰에 직접 넣으십시오.


2
코드를 시도 할 때 "오브젝트 참조가 객체의 인스턴스로 설정되지 않았습니다."라는 오류가 표시됩니다.
Bashar Abu Shamaa

12
뷰에 모델 로직을 추가하는 것은 좋지 않습니다
Daniël Tulp

34

모델에서 사전으로 시작하여 뚱뚱한 핑거링을 피하십시오.

namespace EzPL8.Models
{
    public class MyEggs
    {
        public Dictionary<int, string> Egg { get; set; }

        public MyEggs()
        {
            Egg = new Dictionary<int, string>()
            {
                { 0, "No Preference"},
                { 1, "I hate eggs"},
                { 2, "Over Easy"},
                { 3, "Sunny Side Up"},
                { 4, "Scrambled"},
                { 5, "Hard Boiled"},
                { 6, "Eggs Benedict"}
            };

    }


    }

보기에서 표시 할 목록으로 변환

@Html.DropDownListFor(m => m.Egg.Keys,
                         new SelectList(
                             Model.Egg, 
                             "Key", 
                             "Value"))

32

안녕하세요, 하나의 프로젝트에서 내가 한 일이 있습니다.

     @Html.DropDownListFor(model => model.MyOption,                
                  new List<SelectListItem> { 
                       new SelectListItem { Value = "0" , Text = "Option A" },
                       new SelectListItem { Value = "1" , Text = "Option B" },
                       new SelectListItem { Value = "2" , Text = "Option C" }
                    },
                  new { @class="myselect"})

누군가에게 도움이되기를 바랍니다. 감사


12

또는 데이터베이스 컨텍스트에서 온 경우 사용할 수 있습니다.

@Html.DropDownListFor(model => model.MyOption, db.MyOptions.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() }))

22
이런 종류의 말도 안되는 것을 권장하지 마십시오. Razor 뷰에서 db 컨텍스트를 참조하는 것이 좋지만 소프트웨어를 빌드하는 것을 좋아하는 사람들에게는 올바른 방법입니다. Razor 뷰를 뷰 모델 클래스에 바인딩하면 뷰에 필요한 모든 데이터가 컨트롤러에 의해 생성 된 뷰 모델의 인스턴스에 저장됩니다. 이것은 내가 .Net을 떠나는 이유 중 일부입니다. 너무 많은 끔찍한 개발자가 코드로 끔찍한 일을하고 다른 사람들에게 큰 두통을 겪고 있습니다. 모든 비즈니스 로직을 컨트롤러에 넣는 것이 좋습니다!
JBeckton

7
우선, 영어가 제 첫 언어가 아니기 때문에 문법 오류에 대해 죄송합니다. 누군가가 그런 생각을 통해 논평하는 것을 보는 것은 항상 기쁜 일입니다. 시간을내어 기여한 것에 대해 박수를 보냅니다. 또한 내 직업은 그렇지 않기 때문에 개발자의 직업이 당신과 같은 좋은 손에 달려 있음을 항상 확신합니다. 당신의 무지한 의견의 좋아하는 이유는 내가 더 이상 여기에 게시하지 않는 이유입니다. 이 글을 쓸 때 저는 8 개월 동안 교육을 받았으며 사전에 웹 개발을 건드리지 않았다는 것을 알려 드리겠습니다. 나는 내가 가진 작은 지식으로 다른 접근법을 공유하고 싶었습니다.
Joel Wahlund

7
8 개월? 그렇다면 어떻게 알 수 없을 때 문제를 해결하려고 노력합니까? 내 의견은 무지와는 거리가 멀다. 동료에게해야 할 수동 작업의 양을 고려해야합니다. 수백 개의 뷰가있는 엔터프라이즈 애플리케이션이 있고 CTO가 Oracle DB로 전환하려고한다고 가정하십시오. 한 줄의 코드만으로 드롭 다운 목록을 사용하는 모든 뷰와 컨트롤러를 리팩토링하는 데 드는 실제 비용을 상상해보십시오! 나는 당신을 모욕하려는 것이 아니라, 약간의 나쁜 조언이 어떻게 큰 영향을 미칠 수 있는지 설명하려고 노력하고 있습니다.
JBeckton

2
정적 열거 형 솔루션을 리팩토링 할 필요가 없습니다. 적어도 비즈니스가 목록에 색상을 추가하려고 할 때마다 코드가 변경되지 않았습니다. 더 많은 사람들이 실제로 데이터베이스를 사용하는 것에 대해 생각한다면 세상이 더 좋은 곳이 될 것입니다.
m12lrpv

3
글쎄,이 실은 가끔씩 한 번 방문 할 때 내 얼굴에 미소를 가져옵니다. @SeanT가 조금 더 잘 이해합니다. 나는 도움을 주려고 할 때 일반적으로 공격을 느꼈습니다. 나는 오늘날 모든 것을 레이어로 분리하고 ViewModels로 분리하지 않으면 뷰에 아무것도 닿지 않게하는 것을 선호합니다. 그것은 내가 직접하는 것을 좋아하는 방법입니다. 나는 m12lrpv 네가 :-) 방어에 데려가 뵙죠
조엘 Wahlund

7

"하나의 항목을 선택하십시오"

@Html.DropDownListFor(model => model.ContentManagement_Send_Section,
  new List<SelectListItem> { new SelectListItem { Value = "0", Text = "Plese Select one Item" } }
    .Concat(db.NameOfPaperSections.Select(x => new SelectListItem { Text = x.NameOfPaperSection, Value = x.PaperSectionID.ToString() })),
  new { @class = "myselect" })  

코드에서 파생 됨 : Master Programmer && Joel Wahlund ;
King Reference : https://stackoverflow.com/a/1528193/1395101 JaredPar ;

감사합니다 마스터 프로그래머 && Joel Wahlund && JaredPar ;

행운을 빌어 친구.


1
@using (Html.BeginForm()) {
    <p>Do you like pizza?
        @Html.DropDownListFor(x => x.likesPizza, new[] {
            new SelectListItem() {Text = "Yes", Value = bool.TrueString},
            new SelectListItem() {Text = "No", Value = bool.FalseString}
        }, "Choose an option") 
    </p>
    <input type = "submit" value = "Submit my answer" />
} 

이 답변은 Berat의 것과 비슷하다고 생각합니다. DropDownList의 모든 코드를 뷰에 직접 넣었다는 점입니다. 그러나 이것이 ay / n (부울) 드롭 다운 목록을 만드는 효율적인 방법이라고 생각하므로 공유하고 싶었습니다.

초보자를위한 참고 사항 :

  • 'x'가 무엇인지 걱정하지 마십시오. 여기에서 처음으로 생성되며 MVC 앱의 다른 곳에서는 연결되지 않으므로 'x', '모델', 'm'등
  • 드롭 다운 목록에 사용자에게 표시되는 자리 표시자는 "옵션 선택"이므로 원하는 경우이를 변경할 수 있습니다.
  • 드롭 다운 앞에 "피자 좋아하니?"라는 텍스트가 약간 있습니다.
  • 제출 버튼을 포함한 양식의 완전한 텍스트 여야합니다.

이것이 누군가를 돕기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.