4

PetsName というプロパティを持つクラスがあるとします。画面に空白のままになっている場合は、値プロバイダーを更新したいので、ユーザーがペットの名前を入力しない場合は、強制的に「無名」にします。これは実際のシナリオではありません..これはもちろんサンプルであるため、「Webページにデフォルト値を設定するだけ」などの回答は、このシナリオには適合しません:)

主な問題は、値を更新して、モデルを更新するときにオーバーライドしたものを使用することです。1つのアイデアは、値を削除して追加することだと思います。ModelState を確認すると値が更新されていますが、TryUpdateModel を呼び出しても値は更新されません。以下で行っていることは確かに正しい可能性があり、ここには別の問題がありますが、最初にこれを試してみることにしました。ありがとう!

    //Sample case:

    [HttpPost]
    public ActionResult Edit(PetOwner petOwner)
    {

    //If pets name is not set, force to "Unknown"
    if(petOwner.PetsName=="")
    {
    //Tried this too ModelState.Remove("PetsName");
    //ModelState.Add("PetsName", new ModelState());
    ModelState["PetsName"].Value = new ValueProviderResult("Unnamed", "Unnamed", CultureInfo.CurrentCulture);
    }

    //Get the record/relationships from DB to merge with ModelState
    PetOwner petOwnerToSave = from o in ctx.PetOwners where o.PetOwnerId == petOwner.PetOwnerId select o;

    TryUpdateModel(petOwnerToSave);

    //Save petOwnerToSave
    }

4

1 に答える 1

4

ここでの背後にある実際の問題は、TryUpdateModel がモデル内の値を更新してビューに与えるにもかかわらず、Html.HiddenFor が正しい値を表示していなかったことです。

ここでの問題は、Html ヘルパーが、投稿後にビューをレンダリングしている場合、エラーが発生したに違いないと想定することです (そうでない場合は、GET メソッドを使用してビューにリダイレクトされるため、Post Redirect Get の問題が発生します)。

これについては、http: //blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspxで詳しく説明されています。

于 2010-09-09T05:06:12.190 に答える