一、介绍
在ASP.NET中,用户控件是一种可重用的界面组件,通过用户控件我们可以把常用的UI组件进行封装,使得我们可以重复使用,达到代码复用和代码维护的目的。
动态加载用户控件可以在运行时动态生成用户控件并且将其插入到页面中,非常的灵活方便。
在本文中,我们将利用ASP.NET提供的机制,通过动态加载用户控件实现后台添加和修改的需求。
二、流程
- 创建用户控件
首先我们需要创建一个用户控件,这里我们以一个简单的简历为例。
Resume.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Resume.ascx.cs" Inherits="WebApplication1.Resume" %>
<div>
<div>姓名</div>
<div><asp:TextBox ID="Name" runat="server"></asp:TextBox></div>
<div>性别</div>
<div>
<asp:DropDownList ID="Sex" runat="server">
<asp:ListItem Value="男">男</asp:ListItem>
<asp:ListItem Value="女">女</asp:ListItem>
</asp:DropDownList>
</div>
<div>年龄</div>
<div><asp:TextBox ID="Age" runat="server"></asp:TextBox></div>
<div>学历</div>
<div><asp:TextBox ID="Degree" runat="server"></asp:TextBox></div>
<div>工作经验</div>
<div><asp:TextBox ID="Experience" runat="server"></asp:TextBox></div>
<div>联系方式</div>
<div><asp:TextBox ID="Contact" runat="server"></asp:TextBox></div>
</div>
- 创建页面
我们需要创建一个后台管理的页面,通过页面可以添加或修改个人简历。
AddResume.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AddResume.aspx.cs" Inherits="WebApplication1.AddResume" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h2>添加个人简历</h2>
<div>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</div>
<br />
<asp:Button ID="btnAdd" runat="server" Text="添加" OnClick="btnAdd_Click" />
</div>
</form>
</body>
</html>
- 动态加载用户控件
我们利用ASP.NET提供的方法,在后台动态加载用户控件。
AddResume.aspx.cs:
protected void Page_Load(object sender, EventArgs e)
{
// 如果不是首次加载,则不需要再次加载控件
if (!IsPostBack)
{
UserControl resume = (UserControl)LoadControl("~/Resume.ascx");
PlaceHolder1.Controls.Add(resume);
}
}
- 处理用户输入
由于我们选择动态加载用户控件,所以无法在设计时为其指定一个事件处理程序。因此我们需要在代码中注册事件处理程序。
在这里,我们需要在AddResume.aspx.cs中为添加按钮btnAdd注册事件处理程序btnAdd_Click:
protected void Page_Load(object sender, EventArgs e)
{
// 如果不是首次加载,则不需要再次加载控件
if (!IsPostBack)
{
UserControl resume = (UserControl)LoadControl("~/Resume.ascx");
PlaceHolder1.Controls.Add(resume);
}
btnAdd.Click += new EventHandler(btnAdd_Click);
}
protected void btnAdd_Click(object sender, EventArgs e)
{
// 处理用户输入,保存简历信息
}
当用户单击添加按钮时,将会触发btnAdd_Click事件,我们可以在该事件中编写代码来保存用户输入的个人简历。
三、示例
这里我们将以两个实际示例进行说明。
- 添加个人简历
用户在添加界面输入自己的个人简历信息,并单击添加按钮,即可将个人简历保存到数据库中。
AddResume.aspx.cs:
protected void btnAdd_Click(object sender, EventArgs e)
{
// 获取用户输入信息
string name = ((TextBox)PlaceHolder1.FindControl("Name")).Text;
string sex = ((DropDownList)PlaceHolder1.FindControl("Sex")).Text;
int age = Convert.ToInt32(((TextBox)PlaceHolder1.FindControl("Age")).Text);
string degree = ((TextBox)PlaceHolder1.FindControl("Degree")).Text;
string experience = ((TextBox)PlaceHolder1.FindControl("Experience")).Text;
string contact = ((TextBox)PlaceHolder1.FindControl("Contact")).Text;
//将个人简历信息保存到数据库中
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=ResumeDatabase;Integrated Security=True"))
{
conn.Open();
SqlCommand cmd = new SqlCommand("INSERT INTO Resume (Name, Sex, Age, Degree, Experience, Contact) VALUES(@Name, @Sex, @Age, @Degree, @Experience, @Contact)", conn);
cmd.Parameters.AddWithValue("@Name", name);
cmd.Parameters.AddWithValue("@Sex", sex);
cmd.Parameters.AddWithValue("@Age", age);
cmd.Parameters.AddWithValue("@Degree", degree);
cmd.Parameters.AddWithValue("@Experience", experience);
cmd.Parameters.AddWithValue("@Contact", contact);
cmd.ExecuteNonQuery();
}
Response.Redirect("ResumeList.aspx");
}
- 修改个人简历
用户可以选择要修改的个人简历,单击修改按钮,即可跳转到修改界面。
EditResume.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EditResume.aspx.cs" Inherits="WebApplication1.EditResume" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h2>修改个人简历</h2>
<div>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</div>
<br />
<asp:Button ID="btnSave" runat="server" Text="保存" OnClick="btnSave_Click" />
</div>
</form>
</body>
</html>
EditResume.aspx.cs:
protected void Page_Load(object sender, EventArgs e)
{
// 如果不是首次加载,则不需要再次加载控件
if (!IsPostBack)
{
int resumeId = Convert.ToInt32(Request.QueryString["resumeId"]);
Resume resume = GetResume(resumeId);
if (resume != null)
{
UserControl uc = (UserControl)LoadControl("~/Resume.ascx");
((TextBox)uc.FindControl("Name")).Text = resume.Name;
((DropDownList)uc.FindControl("Sex")).Text = resume.Sex;
((TextBox)uc.FindControl("Age")).Text = resume.Age.ToString();
((TextBox)uc.FindControl("Degree")).Text = resume.Degree;
((TextBox)uc.FindControl("Experience")).Text = resume.Experience;
((TextBox)uc.FindControl("Contact")).Text = resume.Contact;
PlaceHolder1.Controls.Add(uc);
}
}
btnSave.Click += new EventHandler(btnSave_Click);
}
protected void btnSave_Click(object sender, EventArgs e)
{
int resumeId = Convert.ToInt32(Request.QueryString["resumeId"]);
Resume resume = GetResume(resumeId);
if (resume != null)
{
// 获取用户输入信息
string name = ((TextBox)PlaceHolder1.FindControl("Name")).Text;
string sex = ((DropDownList)PlaceHolder1.FindControl("Sex")).Text;
int age = Convert.ToInt32(((TextBox)PlaceHolder1.FindControl("Age")).Text);
string degree = ((TextBox)PlaceHolder1.FindControl("Degree")).Text;
string experience = ((TextBox)PlaceHolder1.FindControl("Experience")).Text;
string contact = ((TextBox)PlaceHolder1.FindControl("Contact")).Text;
// 更新简历信息
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=ResumeDatabase;Integrated Security=True"))
{
conn.Open();
SqlCommand cmd = new SqlCommand("UPDATE Resume SET Name = @Name, Sex = @Sex, Age = @Age, Degree = @Degree, Experience = @Experience, Contact = @Contact WHERE Id = @Id", conn);
cmd.Parameters.AddWithValue("@Name", name);
cmd.Parameters.AddWithValue("@Sex", sex);
cmd.Parameters.AddWithValue("@Age", age);
cmd.Parameters.AddWithValue("@Degree", degree);
cmd.Parameters.AddWithValue("@Experience", experience);
cmd.Parameters.AddWithValue("@Contact", contact);
cmd.Parameters.AddWithValue("@Id", resume.Id);
cmd.ExecuteNonQuery();
}
Response.Redirect("ResumeList.aspx");
}
}
private Resume GetResume(int resumeId)
{
Resume resume = null;
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=ResumeDatabase;Integrated Security=True"))
{
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM Resume WHERE Id = @Id", conn);
cmd.Parameters.AddWithValue("@Id", resumeId);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
resume = new Resume();
resume.Id = Convert.ToInt32(reader["Id"]);
resume.Name = reader["Name"].ToString();
resume.Sex = reader["Sex"].ToString();
resume.Age = Convert.ToInt32(reader["Age"]);
resume.Degree = reader["Degree"].ToString();
resume.Experience = reader["Experience"].ToString();
resume.Contact = reader["Contact"].ToString();
}
}
return resume;
}
这是一个简单的ASP.NET动态加载用户控件的示例,通过动态加载用户控件实现后台添加、修改的需求,可以用于实际项目中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net动态加载用户控件,关于后台添加、修改的思考 - Python技术站