我的编辑界面上有以下内容:
<label for="campaign.CandidateID">Candidate:</label>
<%= Html.DropDownList("Campaign.CandidateID", Model.Candidates, "Choose...")%>
<%= Html.ValidationMessage("CandidateID", "*") %>
并在我的控制器中:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues)
{
Campaign campaign = repos.GetCampaign(id);
try
{
UpdateModel(campaign);
repos.Save();
return RedirectToAction("Index", "Admin");
}
catch
{
return View(new CampaignDTO(campaign));
}
当我编辑记录并更改文本字段时,一切都运行正常,但是当我更改连接到下拉列表的项目时,更改不会在广告系列对象中更新。我检查了this.ValueProvider["Campaign.CandidateID"]
,数据就在那里!
顺便说一句,在显示编辑屏幕的过程中,它会在选择列表中选择正确的候选者。
问题可能来自ValueProvider提供字符串而我班上的CandidateID是int吗?
我很难过。
答案 0 :(得分:2)
你是否在文本字段的名称前加上“Campaign”(即Html.TextBox(“Campaign.Name”)?当你调用UpdateModel而没有指定前缀时,ValueProvider字典中包含前缀的任何数据(即“Campaign.CandidateID”)没有资格绑定到模型对象。这就是为什么你在ValueProvider字典中看到“Campaign.CandidateID”条目(因为它已在请求中成功发布),但它不是绑定到您的Campaign对象。