【问题标题】:Trigger function inside a usercontrol from a page来自页面的用户控件内的触发函数
【发布时间】:2010-06-05 23:33:55
【问题描述】:

我创建了一个用户控件来捕获教育详细信息,它包含 5 个文本框和一个用于将这些值插入到我的数据库中的函数。我已将用户控件添加到页面 5 次。我的 aspx 页面上有一个按钮,我希望能够单击并调用该函数来插入值。

谁能建议我如何做到这一点?

【问题讨论】:

    标签: asp.net user-controls


    【解决方案1】:

    将值插入数据库的函数不应该在您的用户控件中,而应该在您的页面中。您的用户控件本身有保存按钮还是只有页面?在第一个变体中,您应该引发一个事件,页面可以捕获它来保存值。在第二个变体中,您应该迭代通过您的用户控件(动态添加还是固定添加?)。您应该添加将文本框的值返回到页面的公共属性,然后您可以将这些值保存到数据库中。

    【讨论】:

    • 嗨蒂姆,不,我只有一个按钮来提交插入。那么我应该让公共属性对文本框值进行设置吗?不知道这是否是你的意思。在页面中使用 insert 方法有什么好处?
    • 您的用户控件的预期用途是向用户显示并让他输入文本。当设计简单时,您可以在多个页面上重复使用此控件。控件越专业,它就越不可重用。数据访问属于模型而不属于视图。因此,您可以在不更改用户控件的情况下更改模型。或者您可以在不同的应用程序(Windows 应用程序、Web 服务等)中使用该模型,而无需从仅属于 asp.net 的控件中提取数据访问功能。
    • 我会在页面中有保存功能,遍历用户控件并从公共属性中获取它们的值(内部引用文本框的-Text 属性)并将它们保存到数据库(或者更好地使用模型类或项目集中处理数据访问)。
    • 感谢蒂姆的建议。如果你说的完全有道理,我会对此进行调查。
    【解决方案2】:

    在您的用户控件上放置一个public 方法。

    // Inside MyUserControl
    public void SaveIt() {
        // logic to perist the values to db.
    }
    

    单击按钮时,从您的 ASPX 页面(或后面的代码)循环访问您的用户控件实例并调用该方法:

    // On Click...
    
    MyUserControl[] arrControls = new MyUserControl[] {myUC1, myUC2, myUC3, myUC4, myUC5};
    foreach (MyUserControl c in arrControls)
        c.SaveIt();
    

    【讨论】:

    • 一个用户控件属于视图,数据访问应该在模型中分开(或至少控制器=页面)。否则,在我看来,用户控件可能无法很好地重用。
    • 感谢 jdk。没想到这么简单:)
    • @diver-d:确实!尽管它们是 UI/视觉控件,但它们也是纯 .NET 类,因此可以使用相同的 OO 特性,如封装、访问修饰符和引用,在它们之间来回发送消息,就像常规对象一样。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    相关资源
    最近更新 更多