Как FormView EditTemplate обновляет значения в ObjectDataSource UpdateParameters под капотом? - PullRequest
5 голосов
/ 19 апреля 2009

У меня есть FormView, связанный с ObjectDataSource.

* Определение ObjectDataSource (для простоты опущена его часть) *

<asp:ObjectDataSource 
    ID="odsHousehold" 
    runat="server"
    TypeName="BLL.Households"
    ConflictDetection="OverwriteChanges"
    UpdateMethod="UpdateHousehold" 
    >
    <UpdateParameters>
        <asp:Parameter Name="sName" Type="String" Direction="Input" />
        <asp:Parameter Name="sAddress" Type="String" Direction="Input" DefaultValue="" />
        <asp:Parameter Name="sCity" Type="String" Direction="Input" DefaultValue="" />
        <asp:Parameter Name="sState" Type="String" Direction="Input" DefaultValue="" />
        <asp:Parameter Name="sZip" Type="String" Direction="Input" DefaultValue="" />
    </UpdateParameters>
</asp:ObjectDataSource>

* Определение FormView (для простоты опущена его часть) *

   <asp:FormView 
    ID="fvHousehold"
    runat="server"
    DataKeyNames="HouseholdID"
    DataSourceID="odsHousehold"
    HorizontalAlign = "Left"
 >
<EditItemTemplate>
<asp:TextBox ID="txtHouseHoldName" runat="server" MaxLength="50" Width="100%" Text='<%# Bind("HouseholdName") %>'></asp:TextBox>
<asp:TextBox ID="txtAddress" runat="server" MaxLength="50" Width="100%" Text='<%# Bind("Address") %>'></asp:TextBox>
<asp:TextBox ID="txtCity" runat="server" MaxLength="50" Width="100%" Text='<%# Bind("City") %>'></asp:TextBox>
<asp:TextBox ID="txtState" runat="server" MaxLength="50" Width="100%" Text='<%# Bind("State") %>'></asp:TextBox>
<asp:TextBox ID="txtZip" runat="server" MaxLength="50" Width="100%" Text='<%# Bind("Zip") %>'></asp:TextBox>
 <asp:Button ID="btnUpdateHousehold" runat="server" Text="Update" CommandName="Update" />
</EditItemTemplate>
</asp:FormView>

Я хотел бы знать: как FormView узнает, какой UpdateParameter заполнять, какой TextBox EditTemplate при нажатии кнопки Обновить?
Например, я не дал указание "txtAddress "в FormView для заполнения UpdateParameter" sAddress ", но InputParameters [" sAddress "] содержит текстовое значение txtAddress. Откуда он это знает?

Может ли какой-нибудь гуру просветить меня?

Большое спасибо,

Cullen

Ответы [ 3 ]

2 голосов
/ 27 июля 2009

"как FormView узнает, какой UpdateParameter заполнять, какой TextBox EditTemplate при нажатии кнопки Обновить?"

Полагаю, простой ответ таков: он знает из-за операторов Bind, которые вы помещаете в элементы управления TextBox. Например. txtAddress имеет "Bind (" Address ")", поэтому при вызове обновления у него есть связь между txtAddress и параметром "Address"

1 голос
/ 14 мая 2009

У меня есть запись в моем блоге с подробным обсуждением того, как Bind () работает на http://www.aarongoldenthal.com/post/2009/03/15/ASPNET-Databinding-Bind()-Method-Dissected.aspx .

1 голос
/ 20 апреля 2009

Возможно, это просто порядок, в котором элементы управления TextBox добавляются в EditItemTemplate? то есть порядок элементов управления должен соответствовать порядку UpdateParameters ...

Попробуйте поменять местами позиции txtHouseHoldName и txtAddress, передается ли адрес в параметр sName вашего метода обновления?

...