为什么收藏品不会通过邮寄?

时间:2011-06-15 19:23:40

标签: asp.net-mvc

我有一个这种结构的强类型视图模型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。我见过一些例子,人们只是简单地从数据访问调用中重新绑定列表,但是当你在开头有数据时,这似乎很愚蠢。当我有两个多选框时,用户可以将项目从一个盒子移动到另一个盒子,这尤其令人讨厌。如果他们提交并验证失败,我将失去他们对盒子所做的更改。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

asp.net mvc仅将那些值绑定到模型,这些值通过不同的表单字段和selectlist帖子仅在值(如果未配置为其他情况)时发布。因此,绑定到列表的唯一值是视图模型中的name属性。

的数据
IEnumerable<Country> countries
如果出现错误,必须在post actionresult中再次填写

。就你的第二点而言(我相信它没有发生在你发布的代码中)你的下拉列表应该发布多个值,如果这样,那些值将映射到模型的IEnumerable属性。您可以发布代码,以便我们提供帮助