2011-09-18 81 views
0

我想通過傳遞一個JSON到我的控制器操作使用jQuery AJAX更新模型。 我可以看到值已經到達我的控制器,但我的一些模型屬性,如BackgrounColor和BackgroundImage沒有更新。爲什麼我在這裏失蹤。模型將不會綁定使用json上編輯POST

public PartialViewResult Edit(Header header) 
    { 
     // Get the record from the database 

     Header oHeader = CreateHeaderObj(header); 
     Header dbHeader = _headerRepo.GetHeader(header.Id); 

     // Set the properties from the form 
     // Todo : Needs better mapping 
     dbHeader.Title = oHeader.Title; 
     dbHeader.TitleImage = oHeader.TitleImage; 
     dbHeader.BackgroundColor = oHeader.BackgroundColor; 
     dbHeader.BackgroundImage = oHeader.BackgroundImage; 
     dbHeader.ImageBackDefault = oHeader.ImageBackDefault; 
     dbHeader.ImageBackClick = oHeader.ImageBackClick; 
     dbHeader.ImageHomeDefault = oHeader.ImageHomeDefault; 
     dbHeader.ImageHomeClick = oHeader.ImageHomeClick; 
     dbHeader.Mode = oHeader.Mode; 

     // Check if model properties are valid 
     if (ModelState.IsValid) 
     { 
      // Model state is valid, proceed with update 
      UpdateModel(dbHeader); 
      _headerRepo.Save(); 
      return PartialView("_Display", dbHeader); 
     } 
     else 
     { 
      throw new Exception("Failed to update record."); 
     } 
    } 

問候,

瑞恩

編輯: 函數CreateHeaderObj返回與一樣,如果背景是一個有效的十六進制,則前置背景顏色修改的值頁眉模型:#。我可以看到我的backgroundcolor屬性從#f9f9f9更新爲background-color:#f9f9f9,但它沒有保存到數據庫中。我得到的只是f9f9f9

+0

絕對沒有任何理由,只有這兩個特定的屬性將不受約束。請仔細檢查您是否在客戶端拼錯了它們。 –

+0

對不起,你是對的物業越來越受限。但在將它保存到數據庫之前,我會進行一些清理,並且我的更改未保存到表中。 –

回答

0

如果您打算在POST控制器操作中更改視圖模型中的某些值,您需要先將它們從ModelState中移除。因爲HTML helper在綁定它們的值時先查看modelstate,然後再查看模型中的值。

ModelState.Remove("Title"); 
dbHeader.Title = oHeader.Title; 

ModelState.Remove("TitleImage"); 
dbHeader.TitleImage = oHeader.TitleImage; 

// ... you get the point 

而且你應該有一個相應的輸入字段中的每個屬性做到這一點,爲您修改用戶輸入的原始值:

@Html.TextBoxFor(x => x.Title) 
... 
+0

感謝達林,從來沒有想過這是可能的。 –

相關問題