2011-01-30 4 views
1

내 프로젝트의 태그 시스템을 만들려고합니다. 통과 문자열 (예 : "test1, test2, test3")은 목록으로 엔티티에 바인드됩니다.보기에서 컨트롤러, MVC3으로 목록 전달하기

저는 EF를 사용하고 있으며 내 뷰는 EF에 정의 된 엔티티를 상속받습니다. 뷰 모델을 만들지 않고도 가능합니까?

답변

2

가 솔직히보기 모델은 여기가.

하지만 물었 기 때문에 대답을하려고합니다.

public partial class MyEFModel 
{ 
    public IEnumerable<string> List 
    { 
     get 
     { 
      return SomeStringProperty.Split(','); 
     } 
     set 
     { 
      SomeStringProperty = string.Join(",", value.ToArray()); 
     } 
    } 
} 

이를 달성하는 또 다른 방법은 다음과 같이 사용자 정의 모델 바인더를 작성하는 것입니다 :

public class MyBinder : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
     if (value != null) 
     { 
      return value.AttemptedValue.Split(','); 
     } 

     return base.BindModel(controllerContext, bindingContext); 
    } 
} 

public class HomeController : Controller 
{ 
    public ActionResult Index(
     [ModelBinder(typeof(MyBinder))] IEnumerable<string> values 
    ) 
    { 
     return View(); 
    } 
} 

및 IIRC의 EF 모델이처럼, 그들에 속성을 추가 할 수 있음을 의미하는 부분 클래스입니다 /home/index?values=val1,val2,val3은 목록에 올바르게 바인딩해야합니다.

관련 문제