1

EditorForModel()을 사용할 때 DropDownLists로 표시되도록 사용중인 일부 Enum에 대해 여러 EditorTemplates를 만들었습니다. 그러나 목록에서 항목을 선택한 후 양식을 제출하면 항상 첫 번째 항목이 선택한 항목 대신 드롭 다운에 제출됩니다. 내가 가지고있는 경우열거 형 DropDownList는 항상 목록의 첫 번째 값을 반환합니다.

예를 들어, 열거는 "크기"라고하며 값 '작은', '중간' '대형'을 가지고있다. EditorForModel은 'Small', '중간', '큰' 순서대로 표시하는 드롭 다운을 만듭니다. 'Large'을 선택한 다음 데이터베이스에 입력 된 모델 항목의 세부 정보를 확인하면 'Small'이 잘못 표시됩니다.

Sizes.cshtml (편집자 템플릿)

@model Options.Sizes 

@{ 
    var values = Enum.GetValues(typeof(Options.Sizes)).Cast<Options.Sizes>(); 

    IEnumerable<SelectListItem> items = 
     from value in values 
     select new SelectListItem 
     { 
      Text = value.ToString(), 
      Value = value.ToString(), 
      Selected = (value.Equals(Options.Sizes.Small)) 
     }; 
} 

@Html.DropDownList("Size", items) 

Options.cs (클래스 열거를 보유)

public class Options 
{ 
    public enum Sizes 
    { 
     Small, 
     Medium, 
     Large 
    }; 
} 
: 여기

내가 가지고있는 몇 가지 예제 코드입니다

Create.cshtml (보기)

@model = ProjectName.Models.Ball 

<form asp-action="Create" asp-controller="Ball"> 
    @Html.EditorForModel() 
    <input type="submit" value="submit"> 
</form> 

Ball.cs (모델)

public class Ball 
{ 
    [Key] 
    public Nullable<int> ID { get; set; } 

    public string Name { get; set; } 

    public Options.Sizes Size { get; set; } 
} 

은 어떻게 든 볼의 크기 속성은 항상 '작은'입니다 드롭 다운에서 첫 번째 값입니다. 내가 무엇을 선택하든. value.toString에서로 .toString()을 (제거

+0

선택한 값을 설정하고 제출하지 않으면 어떻게됩니까? –

+0

여전히 열거 형에 선언 된 순서대로 실제로 드롭 다운의 첫 번째 값을 사용합니다. –

+0

@ Html.EditorForModel()을 @Html.DropDownListFor로 바꾸고 시도 할 수 있습니다. –

답변

1

브라우저의 드롭 다운을 검사하는 경우. 이로 인해 Create 작업에 게시 할 때 바인딩이 작동하지 않습니다. 여기에 Size이라는 이름이 필요하기 때문에 여기에 포함하지 않았으므로 Ball 모델 만 있으면됩니다.

DropDownListFor를 사용
@Html.DropDownListFor(m => m, items) 

생성 된 select 요소가 올바른 이름을 가져옵니다 보장 :

그것은 마지막 줄은, 그래서 내가 당신의 EditorTemplate를 변경할 때 나를 위해 작동합니다.

+0

이것은 그 것이다. 그것은'Html.DropDownList ("Size", items)'를'Html.DropDownList ("", items)'로 대체하면 작동합니다. 도와 줘서 고마워! –

0

시도) 당신이 이름 Size.Size을 가지고 볼 수 있습니다 버전과

관련 문제