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"]しましたが、データはそこにあります!

ちなみに、編集画面の表示中は、選択リストで正しい候補を選択しています。

クラスの CandidateID が int であるのに対し、ValueProvider が文字列を提供しているという事実から問題が発生する可能性はありますか?

私は困惑しています。

4

1 に答える 1

2

テキスト フィールドの名前にも "Campaign" というプレフィックスを付けていますか (つまり、Html.TextBox("Campaign.Name")?) プレフィックスを指定せずに UpdateModel を呼び出すと、プレフィックスを含む ValueProvider ディクショナリ内のすべてのデータ (つまり、"Campaign. CandidateID") は、モデル オブジェクトにバインドする資格がありません。そのため、ValueProvider ディクショナリに "Campaign.CandidateID" エントリが表示されます (リクエストで正常にポストされたため) が、バインドされていません。キャンペーン オブジェクト。

于 2009-10-23T05:48:45.090 に答える