0

@ Html.EnumDropDownListFor를 사용하고 싶습니다. 문제가 있습니다.EnumDropDownListFor로 개체의 속성에 바인딩

이 내가 가진 것입니다 : DefaultProviderEnum 유형 ProviderFormat이다

@Html.EnumDropDownListFor(x => x.DefaultProviderEnum, 
       "Select default provider", new { @class = "form-control", id = "pro" }) 

:

public enum ProviderFormat 
{ 
    [Description("ASG")] 
    ASG = 1, 
    [Description("SCS")] 
    SCS = 2 
} 

내가 모델에 올바르게 설정하고로드 할 때 제대로 나타납니다. 열거를 결합 할 수있는 방법이 있나요

model.CU.DefaultProviderInt = (int)model.DefaultProviderEnum; 

: 내가 가진 문제는 내가 그것을 게시 할 때 수동으로는 int이며 내 객체에 속성에 바인딩 대신 내 객체를 설정해야합니다입니다 개체의 속성으로 드롭 다운하고 이렇게 설정하지 않아도됩니까?

+0

'model.CU.DefaultProvider' 란 무엇입니까? 당신은 프로퍼티가'ProviderFormat' 타입이고 나중에'int' 타입이라고 말했습니까? 'CU.DefaultProvider'가하는 일을 생략했습니다. – adiga

+0

DefaultProvider는 CU 개체의 int입니다. DefaultProvider를 'ProviderFormat' 유형의 모델에서 설정하려고합니다. –

답변

1

model.CU 객체는 값이 양식의 제출에 제공되어 어떤으로 ModeBinder에 의해 (는 바인더 제본?) 바인딩 얻을 것이다.

@Html.HiddenFor(x => x.CU.DefaultProviderInt, new { id = "cu-default-provider" }) 

는 그 다음 DefaultProviderEnum 드롭 다운과 select 값으로 설정 숨겨진 입력 값에 change 이벤트 처리기를 추가 :

그래서, 당신의 형태로,이 같은 숨겨진 속성을 가질 수 있습니다.

$(function() { 
    $("#DefaultProviderEnum").change(function(){ 
     $("#cu-default-provider").val($(this).val()); 
    }) 
}); 

이제 양식이 제출되면 두 속성의 값이 같습니다.


다른 방법이 있습니다. 코드에 DefaultProviderEnum 값을 수동으로 설정하면 위 코드가 작동하지 않습니다. 그래서, 당신은 DefaultProviderEnum 속성에 대한 사용자 정의 세터 가질 수 있습니다

private ProviderFormat defaultProviderEnum; 

public ProviderFormat DefaultProviderEnum 
{ 
    get { return defaultProviderEnum; } 
    set 
    { 
     if (this.CU != null) 
     { 
      this.CU.DefaultProviderInt = (int)value; 
     } 

     defaultProviderEnum = value; 
    } 
} 

을하지만,이 또한 DefaultModelBinder 속성을 결합하는 순서에 따라 수 있습니다.


세 번째 (DefaultProviderEnum가 설정 될 때 CU가 null의 경우,이 그래서 모델의 생성자에서 CU을 초기화하기 위해서 확인하십시오. 작동하지 않을 수 있습니다)과이 작업을 수행 할 수있는 가장 방법은 수동으로 행사할 enum을 int로 설정하고 CU.DefaultProviderInt으로 설정하십시오.

1

무엇이 잘못 되었나요? 필드가 DefaultProviderEnum에 바인딩되어 있다면, 모델 바인더에 의해 설정되는 유일한 방법이므로,이를 기반으로 다른 속성을 설정하려면 일부 수동 개입이 필요할 것입니다. 모델 바인더가 하나의 게시 된 값을 기반으로 두 개의 속성을 설정하도록하는 방법은 없습니다. 만약 당신이 짖는 나무라면.

그러나, 당신은 단순히 같은 속성을 가질 수 있습니다 그리고

public int DefaultProviderInt => (int)DefaultProviderEnum; 

를 항상 바로 그 순간에 될 일이 무엇 열거 값의 INT 강제 변환을 반환합니다.

+0

나는 드롭 다운을 가지고 열거에 의해 채워진 나무를 껍질로 만들려고 노력하고 있었고 그것을 위해 도우미를 사용하여 int 객체 인 속성을 설정했습니다. int에서 ProviderFormat 열거 형으로 기본 공급자 속성을 변경하면이 도우미를 사용하여 설정하는 속성으로 int를 사용하는 방법이 있는지 알고 싶을뿐입니다. –

+0

아니요. 열거 형을 게시하는 경우 열거 형에 바인딩해야합니다. –