내 프로젝트의 태그 시스템을 만들려고합니다. 통과 문자열 (예 : "test1, test2, test3")은 목록으로 엔티티에 바인드됩니다.보기에서 컨트롤러, MVC3으로 목록 전달하기
저는 EF를 사용하고 있으며 내 뷰는 EF에 정의 된 엔티티를 상속받습니다. 뷰 모델을 만들지 않고도 가능합니까?
내 프로젝트의 태그 시스템을 만들려고합니다. 통과 문자열 (예 : "test1, test2, test3")은 목록으로 엔티티에 바인드됩니다.보기에서 컨트롤러, MVC3으로 목록 전달하기
저는 EF를 사용하고 있으며 내 뷰는 EF에 정의 된 엔티티를 상속받습니다. 뷰 모델을 만들지 않고도 가능합니까?
가 솔직히보기 모델은 여기가.
하지만 물었 기 때문에 대답을하려고합니다.
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
은 목록에 올바르게 바인딩해야합니다.
이를 달성하는 방법은 몇 가지가 있습니다
이러한 구현은 여기에서 찾을 수 있습니다 :
Is it possible to change the querystring variable in ASP.NET MVC path before it hits the controller?