【问题标题】:MVC Updatemodel not updating from DropDownListMVC Updatemodel 未从 DropDownList 更新
【发布时间】:2009-10-23 02:46:45
【问题描述】:

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

<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 吗?

我被难住了。

【问题讨论】:

    标签: asp.net-mvc model-view-controller drop-down-menu updatemodel


    【解决方案1】:

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

    【讨论】:

    • 不,我的文本框没有“Campaign”前缀。所以我在它们前面都加上了“Campaign”,并将对 UpdateModel 的调用更改为 UpdateModel(campaign, "Campaign"),它现在可以工作了!谢谢你。我认为让我感到震惊的是这些字段显示了正确的数据,只有 UpdateModel 有问题。
    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多