3

私は現在、WebForms の新しい (素晴らしい) モデル バインディングを理解するために、小さなダミー アプリケーションに取り組んでいます。ListView と FormView の両方でデータを正常に一覧表示しましたが、データの更新に行き詰まっています。

非常に単純な FormView コントロールがあります。

<asp:FormView runat="server" ID="formViewOrderDetail" 
    ItemType="ModelBindingDummy.Models.Order" DataKeyNames="Id"
    SelectMethod="GetOrder" UpdateMethod="UpdateOrder">
    <ItemTemplate>
        <p>Supplier Order Number: <%#: Item.SupplierOrderNumber %></p>
        <asp:LinkButton Text="Edit" runat="server" ID="linkEdit"
                        CommandName="Edit" />
    </ItemTemplate>
    <EditItemTemplate>
        <p>Supplier Order Number: 
            <asp:TextBox runat="server" ID="SupplierOrderNumber" 
                         Text='<%#: Item.SupplierOrderNumber %>' />
         </p>
        <asp:LinkButton Text="Cancel" runat="server" CommandName="Cancel" />
        <asp:LinkButton Text="Save" runat="server" CommandName="Update" />
    </EditItemTemplate>
</asp:FormView>

私のUpdateOrder方法は次のようになります。

public void UpdateOrder(int id)
{
    ModelBindingDummy.Models.Order item = GetOrder(id);
    if (item == null)
    {
        ModelState.AddModelError("", String.Format("Item with id {0} was not found", id));
        return;
    }            
    TryUpdateModel(item);

    //All data in the app is in-memory, so no need to actually update
    //the item as it is only a reference
}

今私の問題は、TryUpdateModel が機能しないことです。TextBox の値を無視するだけですSupplierOrderNumber

update メソッドにパラメーターを追加しようとしましたが、[Control] string supplierOrderNumberそれは機能しますが、その値を自動的にマップする方法を本当に知りたいです。

コントロールを使用したソリューションも見まし<asp:DynamicEntity />たが、それはやややり過ぎのようです。

だから私の質問は次のとおりです: TryUpdateModelTextBox 値をマップするメソッドを取得することは可能ですDynamicEntitiesか、それともコントロールを完全に使用する必要がありますか、それとも他の素晴らしい解決策はありますか?

ありがとう!

4

2 に答える 2

0

Item.SupplierOrderNumber の代わりに DataItem.SupplierOrderNumber を使用する必要があります

このような別の質問がありますが、より良い説明がありますが、見つかりません。

于 2013-12-26T22:33:46.243 に答える