2013-07-21 181 views
1

我想从使用ASP.NET 4.5的模型绑定功能的ListView控件中显示的产品列表中加载单个产品的详细信息到FormView控件中。使用模型绑定将模型手动绑定到ASP.NET FormView

这是全部托管在一个ASPX页面,该页面决定使用多视图控件显示哪个页面。在一个视图中,我有ListView显示所有产品。在另一个视图中,我有FormView控件来显示/编辑单个产品的细节。当我点击ListView中的单个产品记录时,我想显示包含FormView的视图,并将该产品加载到FormView中进行编辑或查看。

下面的WebForms中的模型绑定的方向,我已经定义了FormView的“SelectMethod”属性与一个方法,它采用ProductId作为它的参数。此方法返回单个相应的Product对象。这是我的理解,在页面生命周期的某个地方调用此方法,并自动加载FormView。

现在,当我在ListView点击记录查看其详细信息,它触发ItemCommand事件处理程序。事件处理程序使用所选记录中的产品ID并检索与此ID相对应的产品。

,问题就在这,然后我需要的是产品绑定到FormView控件。如何手动将产品分配为FormView绑定的模型?当我尝试手动设置FormView控件的DataSource我得到的错误:

"DataSource or DataSourceID cannot be defined on 'ProductForm' when it uses model binding."

有任何人有这种类似的问题,并想出了如何处理呢?

感谢,

回答

2

有没有需要手动分配,因为数据绑定的产品负责该专家组的工作适合你。

首先,确保你有某种按钮的ListView中的每一行与选择的的CommnadName:

<asp:ListView ID="ProductList" runat="server" DataKeyNames="Id" ItemType="Product" SelectMethod="GetProductList"> 
<ItemTemplate> 
    <%# Item.Name %> 
    <asp:Button ID="SelectButton" runat="server" CommandName="Select" /> 
</ItemTemplate> 
</asp:ListView> 

其次,FormView控件的SelectMethod确保产品ID参数具有控制属性指定的地方传递给构造函数的字符串必须ListView控件的ID匹配:

public Product GetProduct([Control("ProductList")] int? id) 
{ 
    if (id.HasValue) 
    { 
     return GetProductList().First(p => p.Id == id.Value); 
    } 
    return null; 
} 

这就是所有你需要做的,因为当选择按钮被点击的ListView的变化的SelectedValue和GetProduct方法被自动调用并更新FormView。

+0

这样做!我不知道“控制”属性。谢谢!! –