WebForms模型绑定:自动将更新的值映射到Item

Chr*_*eld 3 c# asp.net webforms model-binding

我正在研究一个小的虚拟应用程序,以便了解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>
Run Code Online (Sandbox Code Playgroud)

我的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
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是TryUpdateModel不起作用.它只是忽略TextBox中的值SupplierOrderNumber

我已经尝试在update方法中添加一个参数[Control] string supplierOrderNumber,虽然有效,但我真的很想看到一种自动映射该值的方法.

我也看过使用该<asp:DynamicEntity />控件的解决方案,但这看起来有点矫枉过正.

所以我的问题是:是否有可能获得TryUpdateModel映射TextBox值的方法,或者我是否需要一直使用DynamicEntities控件,还是有其他任何奇特的解决方案?

谢谢!

Mer*_*nzo 6

你需要使用BindItem.SupplierOrderNumber而不是Item.SupplierOrderNumber.