我正在跟踪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
属性有效?
答案 0 :(得分:0)
根据标题,我假设您的问题是当您的行为仅接受Options
时如何发布BaseViewModel
,即:
public ActionResult Foo(BaseViewModel model)
{
// do something with `model.Options`
}
如果是这样的话,答案就是你不能。帖子的结果只是键值对字符串的集合。模型绑定器的任务是获取此数据并将其转换为您的操作接受的参数,实例化类和设置属性。但是,它不是通灵的。它需要以动作参数类型的形式提供指导。鉴于此,基于该操作,它将实例化BaseViewModel
,然后查看它可以填充的属性。它将填充Id
,但之后就完成了。它将简单地丢弃其余的已发布数据,因为BaseViewModel
无法做到这一点。模型绑定器无法知道FooViewModel
实际上是您想要的。如果您需要FooViewModel
的实例,则必须输入您的操作参数。没有别的办法。