2010-08-23 36 views
4

假設我們有一個名爲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 
    } 

回答

4

幕後真正的問題是,Html.HiddenFor沒有顯示即使TryUpdateModel正在更新模型值給到視圖正確的值。

這裏的問題是,Html助手會假設如果你在一篇文章之後渲染一個視圖,那麼肯定會出錯(否則你會用GET方法重定向回視圖 - 因此Post重定向獲取問題)

這是在細節,請 http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx

+0

通過「詳細」你的意思是繞過後重定向消息獲得通過使用'ModelState.Clear()傭工的假設,;'。非常感謝你的鏈接,我真的有問題搞清楚爲什麼我在ajax後發生錯誤。你的其他建議(這裏:http://stackoverflow.com/a/5906396/1026459)真的很好地結合在一起,它展示瞭如何正確地在部分視圖中使用'@ {if(ViewContext.FormContext == null){ViewContext.FormContext = new FormContext();}'。謝謝! :) – 2012-04-16 23:45:13

相關問題