gpt4 book ai didi

asp.net - 内部 .ascx 控件和 FormView 中的数据绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 16:48:40 26 4
gpt4 key购买 nike

我在 FormView 中有 ascx 控件。我想要的是在 ascx 中使用 Bind 语法。这是我的页面:

    <asp:ObjectDataSource runat="server" ID="ods" TypeName="MyDS" SelectMethod="Get" UpdateMethod="Update" DataObjectTypeName="Ent">
</asp:ObjectDataSource>
<asp:FormView runat="server" DefaultMode="Edit" ID="fv1" DataSourceID="ods">
<EditItemTemplate>
<uc1:WebUserControl ID="WebUserControl1" runat="server" />
<asp:Button runat="server" CommandName="Update" Text="Update"/>
</EditItemTemplate>
</asp:FormView>

这是 WebUserControl.ascx:

<asp:TextBox ID="txt1" runat="server" Text='<%# Bind("Name") %>' />

在文本框中选择值时,一切正常。绑定(bind)用预期值填充文本框。但是,当按下“Update”按钮时,ObjectDataSource 的方法 Update 会获取带有 null 而不是 Name 的 Ent 实例,而需要输入文本。只是为了测试,我已将文本框放入 .aspx 中,一切正常。

最后,我通过反射器 FormView 进行了反编译,其中 ExtractRowValues 看起来失败,因为仅在直接子级上进行迭代。有人知道如何解决子绑定(bind)问题吗?

最佳答案

抱歉,如果有点晚了:-)

“绑定(bind)”是一种奇怪的野兽。到处都没有 Bind 方法。它只是一个特定的 ASP.NET token ,指示 ASP.NET 编译器在数据绑定(bind)上添加“Eval”调用(确实有一个 Eval 方法),并为双向绑定(bind)生成特定的提取代码隐藏方法。

但此方法仅针对配备 ITemplate 的控件添加(并在提取时调用)属性(例如 FormView 的 ItemTemplate、EditItemTemplate 等),并且声明为可双向绑定(bind)。

不幸的是,对于用户控件(ascx)来说,没有简单的方法来生成这种方法。

但是,有 IBindableControl Interface您可以在允许某些集成的用户控件中实现,尽管它不太自动化,也不太声明性,如下所示:

WebUserControl.ascx:

<asp:TextBox ID="txt1" runat="server" Text='<%# Eval("Name") %>' />

(请注意,Bind 没有用,因此您可以坚持使用 Eval)。

WebUserControl.ascx.cs:

public partial class WebUserControl : UserControl, IBindableControl
{
public void ExtractValues(IOrderedDictionary dictionary)
{
dictionary["Name"] = txt1.Text;
}
}

关于asp.net - 内部 .ascx 控件和 FormView 中的数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2516033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com