我有一个这种结构的强类型视图模型MyViewModel:
public name { get; set; }
public IEnumerable<Country> { get; set; }
我在控制器动作中填充了这样的变量,索引:
string name = GetName();
IEnumerable<Country> countries = GetCountres();
然后我创建一个视图模型并返回它:
var model = new MyViewModel
{
name = name,
countries = countries
};
当调用Index时,一切顺利,我可以在DropDownListFor调用中使用“countries”IEnumerable。但是,当我提交表单时,POST到一个看起来像这样的控制器:
public ActionResult Index(MyViewModel model)
我只能从模型中访问“简单”变量; string,int,decimal,bool等。任何IDictionariess或IEnumerables都为null。我见过一些例子,人们只是简单地从数据访问调用中重新绑定列表,但是当你在开头有数据时,这似乎很愚蠢。当我有两个多选框时,用户可以将项目从一个盒子移动到另一个盒子,这尤其令人讨厌。如果他们提交并验证失败,我将失去他们对盒子所做的更改。有办法解决这个问题吗?
答案 0 :(得分:1)
asp.net mvc仅将那些值绑定到模型,这些值通过不同的表单字段和selectlist帖子仅在值(如果未配置为其他情况)时发布。因此,绑定到列表的唯一值是视图模型中的name属性。
的数据IEnumerable<Country> countries
如果出现错误,必须在post actionresult中再次填写。就你的第二点而言(我相信它没有发生在你发布的代码中)你的下拉列表应该发布多个值,如果这样,那些值将映射到模型的IEnumerable属性。您可以发布代码,以便我们提供帮助