2010-07-31 115 views
0

我创建了一个在我的网站的页面(Member.aspx)上动态加载的Web用户控件(MemberDetails.ascx)。该控件有一些TextBoxes。我想将用户在这些文本框中输入的值存储到Member.aspx页面上按钮的单击事件(即不是用户控件的一部分)上的数据库中。从动态加载的Web用户控件(asp.net c#)中的控件访问值

我将使用一个小代码为例。

Member.ascx页:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MemberDetails.ascx.cs" Inherits="Users_MemberDetails" %> 
<div align="center"> 
<table runat="server" align="center" bordercolor="Black" id="tbl1"> 
<tr> 
<td>First Name:</td><td><asp:TextBox ID="txtFname" runat="server" /></td> 
</tr> 
    <tr> 
    <td>Last Name:</td><td><asp:TextBox ID="txtLname" runat="server" /></td> 
    </tr> 
</table> 
</div> 

Member.aspx.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class Users_Booking : System.Web.UI.Page 
{ 

protected void Page_Load(object sender, EventArgs e) 
{ 
    UserControl Memberuc; 
    Memberuc = (UserControl)LoadControl("MemberDetails.ascx"); 
    Memberuc.ID = "Memberuc1"; 
    PlaceHolder1.Controls.Add(Memberuc); 
} 
protected void btnSave_Click(object sender, EventArgs e) 
{ 
    /*Code for saving the input to a database*/ 
} 
} 

我尝试了好几种方法(使用属性和的FindControl等)做各种论坛使用的建议,但没有为我工作。请发布所需的代码。 谢谢。

回答

1

由于控制将加载自己的视图状态,你很可能推逻辑在你的控制调用你的DAL:

public interface IMyUserControl 
{ 
    void Save(); 
} 

public class MemberDetails : UserConntrol, IMyUserControl 
{ 
    // Other stuff here. 

    public void Save() 
    { 
    string forename = txtFname.Text; 
    string surname = txtLname.Text; 

    // Call your DAL here. 
    } 
} 

,然后从页面调用它:

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    var control = PlaceHolder1.FindControl("Memberuc1") as IMyUserControl; 
    if (control != null) 
    { 
    control.Save(); 
    } 
} 

这是所有未经测试的,但应指出你在正确的方向。

+0

非常感谢,马修。那样做了。 – sg1 2010-07-31 21:24:55