[英]Need Fix:- Updating is not supported by ObjectDataSource 'odsShiftDetails' unless the UpdateMethod is specified
[英]Why does the UpdateMethod in ObjectDataSource only receive values for properties from visible controls in DetailsView?
我編寫了一個包含ObjectDataSource選擇和更新方法的類。 UpdateMethod接收一個被調用類的實例。 我的問題是,僅設置在DetailsView中綁定的屬性,其他屬性具有其默認值。
這是我的代碼:
類聲明 :
public class Foo
{
public string Prop1 {get;set:}
public int Prop2 {get;set;}
}
更新方法 :
[DataObjectMethod(DataObjectMethodType.Update)]
public static void UpdateQuicklink(Foo item)
{
// item.Prop1 // contains correct value
// item.Prop2 // is 0
}
標記 :
<asp:DetailsView ID="DetailsView1" runat="server"
DataSourceID="ods" EnableModelValidation="True" AutoGenerateInsertButton="True"
AutoGenerateRows="False" AutoGenerateEditButton="True">
<Fields>
<asp:BoundField DataField="Prop1"/>
<asp:BoundField DataField="Prop2" Visible="false"/>
</Fields>
</asp:DetailsView>
<asp:ObjectDataSource ID="ods" runat="server"
TypeName="NamespaceToClassContaingUpdateMethod"
OldValuesParameterFormatString="original_{0}"
DataObjectTypeName="NamespaceToFoo"
UpdateMethod="UpdateQuicklink">
</asp:ObjectDataSource>
我無法將所需的每個字段都暴露給標記。
一個可能的解決方案是重寫我的UpdateMethod以接受所有必需的參數,如下所示:
[DataObjectMethod(DataObjectMethodType.Update)]
public static void UpdateQuicklink(string Prop1, int Prop2)
{
}
但是這種解決方案很糟糕,因為如果我嘗試更改基礎數據結構,它的靈活性還不夠。 我知道在那種情況下,我仍然必須編輯我的代碼,但是我只需要將自定義包裝器類作為參數。 那可能嗎?
似乎不可見的DataControlFields
的值(如BoundField
)未包含在ViewState中,因此在往返期間未保留。 這里是關於這個問題的討論。 Microsoft的建議此處是將不可見字段的字段名稱添加到數據綁定控件的DataKeyNames
屬性。 您可以從Fields
集合中刪除不可見的Fields
:
<asp:DetailsView ID="DetailsView1" runat="server"
DataSourceID="ods" EnableModelValidation="True" AutoGenerateInsertButton="True"
AutoGenerateRows="False" AutoGenerateEditButton="True"
DataKeyNames="Prop2">
<Fields>
<asp:BoundField DataField="Prop1"/>
</Fields>
</asp:DetailsView>
這對於模板中的控件不是必需的-就像使用Text='<%# Bind("Prop2") %>'
的FormView的EditItemTemplate中的TextBox一樣。 在此,即使對於不可見的TextBox,在往返過程中也會保留ViewState(當然,除非您禁用ViewState)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.