【发布时间】:2011-08-17 16:50:57
【问题描述】:
我有一个名为 ArticleAdmin 的视图模型,其中包含一个复选框列表:
public class ArticleAdmin
{
public ArticleAdmin()
{
TopicCheckboxes = new List<TopicCheckbox>();
}
...
public IList<TopicCheckbox> TopicCheckboxes { get; set; }
...
}
TopicCheckbox 有自己的视图模型类,在单独的文件中定义:
public class TopicCheckbox
{
public bool IsAssociated { get; set; }
public string TopicName { get; set; }
public int TopicId { get; set; }
}
这很适合将模型传递到视图中:
(更新:为了清晰起见,新加入了这个 Action 方法)
public ActionResult Edit(int id)
{
//Get the Article entity by id:
var articleEntity = Repository.Articles.Get<Article>(id);
//Map the entity to the viewmodel:
Mapper.CreateMap<Article, ArticleAdmin>();
// 2nd mapping to populate the article's relations to topics:
Mapper.CreateMap<TopicArticle, TopicArticleAdmin>();
var articleData = Mapper.Map<Article, ArticleAdmin>(articleEntity);
//Generate checkboxes (models) to manage associations with topics:
foreach (var topic in Repository.Topics.List())
{
var topicCheckbox = new TopicCheckbox { TopicId = topic.Id, TopicName = topic.Title };
if (Repository.TopicArticles.FindList(x => x.TopicId == topic.Id && x.ArticleId == id).Count() > 0)
topicCheckbox.IsAssociated = true;
//and add them to the viewmodel:
articleData.TopicCheckboxes.Add(topicCheckbox);
}
return View(articleData);
}
...我期望的所有复选框都出现在表单中:
但显然这个列表不是模型绑定回到 [HttpPost]“编辑”ActionMethod。
即使在表单中填充了 TopicCheckboxes 列表,但 ActionMethod 中的列表是空的。
[HttpPost]
public ActionResult Edit(ArticleAdmin articleData)
...articleData.TopicCheckboxes 的计数为 0。
那么如何让模型绑定正常工作,以便在 ActionMethod 中正确填充此复选框列表在回发时?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-2 model-binding