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
}