假設我們有一個名爲PetsName的屬性的類。如果它在屏幕上留空,我想更新值提供程序,所以如果用戶沒有輸入寵物名稱,我們強制'unnamed'。這不是真正的場景..這當然是一個示例,所以像「只在網頁上設置默認值」等答案將不適合這種情況:)在TryUpdateModel之前更新值提供程序
主要問題是我們想要更新值,所以當你更新模型時,它將使用任何被覆蓋的值。我想一個想法是刪除價值並添加它。當我檢查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
}
通過「詳細」你的意思是繞過後重定向消息獲得通過使用'ModelState.Clear()傭工的假設,;'。非常感謝你的鏈接,我真的有問題搞清楚爲什麼我在ajax後發生錯誤。你的其他建議(這裏:http://stackoverflow.com/a/5906396/1026459)真的很好地結合在一起,它展示瞭如何正確地在部分視圖中使用'@ {if(ViewContext.FormContext == null){ViewContext.FormContext = new FormContext();}'。謝謝! :) – 2012-04-16 23:45:13