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

时间:2013-08-29 15:41:52

标签: 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>

我的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

中的值

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

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

所以我的问题是:是否可以使用TryUpdateModel方法来映射TextBox值,或者我是否需要使用DynamicEntities控件,或者还有其他任何想法溶液

谢谢!

2 个答案:

答案 0 :(得分:6)

您需要使用BindItem.SupplierOrderNumber代替Item.SupplierOrderNumber

答案 1 :(得分:0)

您需要使用DataItem.SupplierOrderNumber而不是Item.SupplierOrderNumber

还有一个像这样的问题有一个更好的解释,但我找不到它。