簡體   English   中英

為什么ObjectDataSource中的UpdateMethod僅從DetailsView中的可見控件接收屬性的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM