문제

다중 선택 상자에서 내 양식 값을 강하게 입력 한보기에 어떻게 묶을 수 있는지 알고 싶습니다.

분명히 양식이 제출 될 때 멀티 선택 상자에 선택한 내 값의 delittemered 문자열을 제출할 것입니다 ...이 값 문자열을 다시 변환하여 업데이트 할 모델에 첨부 할 객체 목록으로 다시 변환하는 가장 좋은 방법은 무엇입니까?

public class MyViewModel {
    public List<Genre> GenreList {get; set;}
    public List<string> Genres { get; set; }
}

컨트롤러 내부의 모델을 업데이트 할 때는 다음과 같이 UpdateModel을 사용하고 있습니다.

Account accountToUpdate = userSession.GetCurrentUser();
UpdateModel(accountToUpdate);

그러나 어떻게 든 문자열에서 값을 다시 객체로 가져와야합니다.

나는 그것이 모델 바인더와 관련이있을 수 있지만 이것을 수행하는 방법에 대한 명확한 예를 찾을 수는 없습니다.

감사!! 폴

도움이 되었습니까?

해결책

모델 바인더가 갈 길이 맞습니다. 이 시도...

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

[ModelBinder(typeof(MyViewModelBinder))]
public class MyViewModel {
    ....
}

public class MyViewModelBinder : DefaultModelBinder {
    protected override void SetProperty(ControllerContext context, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value) {
        if (propertyDescriptor.Name == "Genres") {
            var arrVals = ((string[])value)[0].Split(',');
            base.SetProperty(context, bindingContext, propertyDescriptor, new List<string>(arrVals));
        }
        else
            base.SetProperty(context, bindingContext, propertyDescriptor, value);
    }
}

다른 팁

체크 아웃 Phil Haacks 블로그 게시물 주제에. 나는 그것을 최근 프로젝트에서 강력하게 입력 한 다중 선택의 기초로 사용했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top