ASP.NET MVC MultiSelect가있는 강력하게 입력 한보기 모델
-
18-09-2019 - |
문제
다중 선택 상자에서 내 양식 값을 강하게 입력 한보기에 어떻게 묶을 수 있는지 알고 싶습니다.
분명히 양식이 제출 될 때 멀티 선택 상자에 선택한 내 값의 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 블로그 게시물 주제에. 나는 그것을 최근 프로젝트에서 강력하게 입력 한 다중 선택의 기초로 사용했습니다.
제휴하지 않습니다 StackOverflow