1

我的编辑屏幕上有以下内容:

<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 的事实?

我难住了。

4

1 回答 1

2

您是否也在文本字段的名称前加上“Campaign”(即 Html.TextBox("Campaign.Name")?当您在不指定前缀的情况下调用 UpdateModel 时,ValueProvider 字典中的任何数据都包含前缀(即“Campaign.Name”)? CandidateID") 将没有资格绑定到模型对象。这就是为什么您在 ValueProvider 字典中看到“Campaign.CandidateID”条目的原因(因为它已成功发布在请求中),但它没有被绑定到您的 Campaign 对象。

于 2009-10-23T05:48:45.090 回答