asp.net mvc多态模型绑定

时间:2015-12-08 12:07:26

标签: c# asp.net-mvc asp.net-mvc-4

我正在跟踪this示例,我的ViewModel稍作修改

public abstract class BaseViewModel
{
    public int Id { get; set; }
}

public class FooViewModel : BaseViewModel
{
    public string Foo { get; set; }
    public IEnumerable<string> Options { get; set; }
}

如何使上面示例中的IEnumerable属性有效?

1 个答案:

答案 0 :(得分:0)

根据标题,我假设您的问题是当您的行为仅接受Options时如何发布BaseViewModel,即:

public ActionResult Foo(BaseViewModel model)
{
    // do something with `model.Options`
}

如果是这样的话,答案就是你不能。帖子的结果只是键值对字符串的集合。模型绑定器的任务是获取此数据并将其转换为您的操作接受的参数,实例化类和设置属性。但是,它不是通灵的。它需要以动作参数类型的形式提供指导。鉴于此,基于该操作,它将实例化BaseViewModel,然后查看它可以填充的属性。它将填充Id,但之后就完成了。它将简单地丢弃其余的已发布数据,因为BaseViewModel无法做到这一点。模型绑定器无法知道FooViewModel实际上是您想要的。如果您需要FooViewModel的实例,则必须输入您的操作参数。没有别的办法。