Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC中模型绑定期间属性上的KnownType属性?_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 3_C# 4.0 - Fatal编程技术网

C# MVC中模型绑定期间属性上的KnownType属性?

C# MVC中模型绑定期间属性上的KnownType属性?,c#,asp.net,asp.net-mvc,asp.net-mvc-3,c#-4.0,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,C# 4.0,假设我有一类食物和一类源自食物的鸟食: public class Food { ... } public class BirdFood : Food { public int SeedCount { get; set; } } 让我们假设我有一个类生物和一个类鸟,它来自于这个类生物 public class Creature { public Food Food { get; set; } } public class Bird : Creature { ...

假设我有一类食物和一类源自食物的鸟食:

public class Food
{
   ...
}

public class BirdFood : Food
{
    public int SeedCount { get; set; }
}
让我们假设我有一个类生物和一个类鸟,它来自于这个类生物

public class Creature
{
    public Food Food { get; set; }
}

public class Bird : Creature
{
   ...
}
最后,假设我有一个生物视图模型:

public class ViewModel
{
    public Creature Creature { get; set; }
}
创建Bird实例时,我还创建BirdFood实例并将其指定给Food属性,然后将视图模型传递给视图。很简单

    public ActionResult Index()
    {
        ViewModel viewModel = new ViewModel();

        viewModel.Creature = new Bird();

        viewModel.Creature.Food = new BirdFood() { SeedCount = 100 } ;

        return View(viewModel);
    }
以及以下观点:

<% using(Html.BeginForm("Save", "Home", FormMethod.Post))
   { %>

   <%: Html.Hidden("Creature.Food.SeedCount", (Model.Creature.Food as MvcApplication6.Controllers.BirdFood).SeedCount)  %>

   <input type="submit" />

<% } %>

好吧,问题来了。当在动作中接收到视图模型时,生物属性是基类生物,而不是派生类型的Bird,其SeedCount属性是派生类型BirdFood,其post参数(来自firebug)类似于
biot.Food.SeedCount 100


好的,我的问题是,当绑定模型时,如何保留派生类型?我怀疑这与一个定制的模型活页夹有关,但我对此一无所知。有什么想法吗?

默认的模型绑定器只是检查视图模型中的类型并使用这些类。他猜不出您想要某个派生类。A可以用来提供这样的提示。这是。

摇滚乐。我们希望有一个更简单、更自然的解决方案,但这将完成这项工作。