我有一個從接口派生的對象。我想使用顯示模板和編輯器模板。顯示模板工作得很好。但編輯器模板不能很好地工作。它不理解它說「不能創建一個接口的實例」。 我有一個自定義模型活頁夾。但它確實是虛擬的。接口模型綁定 - MVC 4
protected override object CreateModel(ControllerContext controllerContext,ModelBindingContext bindingContext, Type modelType)
{
if (modelType.Equals(typeof(IExample)))
{
Type instantiationType = typeof(ExampleType1);
var obj = Activator.CreateInstance(instantiationType);
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, instantiationType);
bindingContext.ModelMetadata.Model = obj;
return obj;
}
return base.CreateModel(controllerContext, bindingContext, modelType);
}
我該如何爲每個從IExample派生的類做到這一點?有任何想法嗎?
[HttpGet]
public ActionResult Index()
{
MyModel model = new MyModel();
model.inter = new ExampleType1();
model.inter.number = 50;
return View(model);
}
[HttpPost]
public ActionResult Index(MyModel model)
{
//*-*-* I want to get it here.
return View();
}
public class MyModel
{
public IExample inter { get; set; }
}
public interface IExample
{
int number { get; set; }
}
public class ExampleType1 : IExample
{
public int number { get; set; }
public string tip1 { get; set; }
}
public class ExampleType2 : IExample
{
public int number { get; set; }
public string tip2 { get; set; }
}
你說的意思是什麼? 「我怎麼能做到這一點從的IExample任何想法派生的每個類?」。另外,我認爲moel binder的部分是錯誤的。應該是:bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null,modelType); – Botis
我只爲ExampleType1創建了實例。 類型instantiationType = typeof(ExampleType1);在我的索引操作中,我說IExample是ExampleType1的類型。但我可以說它是ExampleType2。 我也想爲ExampleType2創建一個實例。但我想要做到這一點。我可以從IExample派生更多的類。 – user3127359
類似的問題在這裏:http://stackoverflow.com/questions/8276627/how-can-i-build-a-custom-model-binder-which-will-return-different-types-of-model。但是我同意Botis的說法,可能有更好的方法。 –