比方說,我有一個頁面FormView
,其中有一個表單允許將文章註冊到數據庫中。用戶可以填寫一些屬性,如號碼,說明等我使用EntityDataSource
。ASP.NET WebForms在運行時將插入操作更改爲更新
我可以執行插入/更新操作。問題是,在某些情況下(確切地說,如果具有相同Number
的對象的屬性IsDeleted
設置爲true),我希望cancell Insert
操作並執行Update
。要做到這一點,我開始有這樣的事情:
protected void ArticleFormView_ItemInserting(object sender, FormViewInsertEventArgs e)
{
string articleNo = e.Values[ "Number" ].ToString();
// ...some other things...
if (this.ShouldUpdateInsteadOfInsert(articleNo))
{
e.Cancel = true; //cancel insert
this.ArticleFormView.ChangeMode(FormViewMode.Edit);
this.ArticleFormView.UpdateItem(false);
return;
}
}
這成功地取消Insert
並調用Update
。但是在ArticleFormView_ItemUpdating
事件處理程序屬性NewValues
的FormViewUpdateEventArgs
對象中有一些默認值 - 不是用戶輸入的值。
protected void ArticleFormView_ItemUpdating(object sender, FormViewUpdateEventArgs e)
{
// e.NewValues["Number"] - not the same as
// e.Values["Number"] from ArticleFormView_ItemInserting
}
有沒有可能使它以這種方式工作?
我可以在ItemInserting
中手動創建一個Entity
對象並手動分配所有值,但對象有200多個字段,所以我正在尋找更好的方法。
我會爲這種情況提供一個很好的解決方案。