2013-03-04 55 views
0

我正在使用.NET 4.5中添加的ASP.NET表單模型綁定。我發現有很多關於模型綁定的東西可以使它更容易,並減少需要編寫的代碼量。但是,我想知道是否有方法可以手動更新項目。ASP.NET 4.5模型綁定自定義更新

我發現像這樣的TryUpdateModel方法:

public void UpdateEquipment(int Id) 
{ 
    var equip = EquipCondContext.Equipments.Single(x => x.Id == Id); 
    TryUpdateModel(equip); 
} 

,但是,我想有能力做到這一點:

public void UpdateEquipment(int Id) 
{ 
    var equip = EquipCondContext.Equipments.Single(x => x.Id == Id); 
    //equip.Description = A TextBox.Text on that row that I just saved in my list. 
    EquipCondContext.SaveChanges(); 
} 

有沒有一種方法,我可以做更多的手動那種更新?


這是一個示例場景。比方說,我有一個用戶輸入用戶ID的行上的文本框,但在更新我想實際設置他們的徽章號碼。在我的更新函數中,我首先要做一個查詢來獲取給定用戶ID的徽章號碼,然後在保存上下文之前在我的實體中設置此屬性。

+1

在第二個示例中,根本不需要模型綁定。 – Nenad 2013-03-04 18:11:01

+0

也許這會讓事情更清楚,如果你舉了一個你想要實現的例子。你爲什麼要手動更新? – magnattic 2013-03-04 18:16:02

+0

你的第二個例子將工作。 TryUpdateModel將使用您的模型'equip'和默認值提供程序(Form,Querystring等),並嘗試通過匹配模型上的名稱來設置值。 – Joe 2013-03-04 18:27:31

回答

0

如果要手動跟蹤文本框中的更改,您必須聽Textbox.TextChanged event

<asp:Textbox ... OnTextChanged="MyTextBoxOnTextChanged" /> 

在那裏你可以使用任何你想要的文本框的值,在你的情況下將它存儲爲相應的設備描述。

1

你試圖做的是在模型綁定過程中掛鉤並在保存之前更改值。我不知道如果模型在Web表單綁定是1:1的相同MVC,但你可以嘗試這篇文章:

http://www.markeverard.com/2011/07/18/creating-a-custom-modelbinder-allowing-validation-of-injected-composite-models/

這篇文章是關於驗證,你可以很容易地改變值在那裏。

基本上你要做的是爲你的類註冊一個自定義的ModelBinder,然後綁定到調用來綁定模型。