首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接口模型绑定- MVC 4

接口模型绑定- MVC 4
EN

Stack Overflow用户
提问于 2013-12-22 15:34:33
回答 1查看 347关注 0票数 1

我有一个从接口派生出来的对象。我想使用显示模板和编辑器template.Display模板工作得很好。但是编辑器模板工作不太好,well.It不明白它说的“不能创建接口的实例”。我有一个定制的模型活页夹。但它真的是假的。

代码语言:javascript
复制
      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派生的每个类,我如何做到这一点?有什么想法吗?

代码语言:javascript
复制
    [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();
     }

代码语言:javascript
复制
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; }
}
EN

回答 1

Stack Overflow用户

发布于 2013-12-22 16:07:56

没有考虑为什么你需要这个(我认为这是一个糟糕的设计,把接口作为控制器方法的参数)。我认为最简单的解决方案是使用string属性ImplementedType扩展ImplementedType接口。

代码语言:javascript
复制
public interface IExample
{
    string type {get;}
    int number { get; set; }
}

执行情况:

代码语言:javascript
复制
public class ExampleType1 : IExample
{
    public string type 
    { get { return "ExampleType1"; } }
    public int number { get; set; }
    public string tip1 { get; set; }
}

和范本:

代码语言:javascript
复制
var type = (string)bindingContext.ValueProvider.GetValue("type");
if (type == "ExampleType1")
{
    //create new instance of exampletype1. 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20730993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档