我有一個視圖模型稱爲ArticleAdmin包括複選框列表(?):問題的數據綁定在[HttpPost]編輯ActionMethod
public class ArticleAdmin
{
public ArticleAdmin()
{
TopicCheckboxes = new List<TopicCheckbox>();
}
...
public IList<TopicCheckbox> TopicCheckboxes { get; set; }
...
}
ToopicCheckbox有它自己的視圖模型類,在一個單獨的文件中定義:
public class TopicCheckbox
{
public bool IsAssociated { get; set; }
public string TopicName { get; set; }
public int TopicId { get; set; }
}
這非常適用於通過模型到視圖:
(UPDATE:此操作方法是新包括了一些清晰度)
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的這個名單是正確填充後上-back?
感謝LordCover。我深入這個例子,看看我能否理解它 - 看起來像我需要挖掘ModelBindingContext和ControllerContext。目前,我只是想澄清(我已經更新了我的問題以反映這一點):填充模型發送到視圖沒有問題,問題是模型綁定HttpPost操作方法。 – Faust 2011-05-04 07:18:15