asp.net动态加载用户控件,关于后台添加、修改的思考

一、介绍

在ASP.NET中,用户控件是一种可重用的界面组件,通过用户控件我们可以把常用的UI组件进行封装,使得我们可以重复使用,达到代码复用和代码维护的目的。

动态加载用户控件可以在运行时动态生成用户控件并且将其插入到页面中,非常的灵活方便。

在本文中,我们将利用ASP.NET提供的机制,通过动态加载用户控件实现后台添加和修改的需求。

二、流程

  1. 创建用户控件

首先我们需要创建一个用户控件,这里我们以一个简单的简历为例。

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>
  1. 创建页面

我们需要创建一个后台管理的页面,通过页面可以添加或修改个人简历。

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>
  1. 动态加载用户控件

我们利用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);
    }
}
  1. 处理用户输入

由于我们选择动态加载用户控件,所以无法在设计时为其指定一个事件处理程序。因此我们需要在代码中注册事件处理程序。

在这里,我们需要在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事件,我们可以在该事件中编写代码来保存用户输入的个人简历。

三、示例

这里我们将以两个实际示例进行说明。

  1. 添加个人简历

用户在添加界面输入自己的个人简历信息,并单击添加按钮,即可将个人简历保存到数据库中。

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");
}
  1. 修改个人简历

用户可以选择要修改的个人简历,单击修改按钮,即可跳转到修改界面。

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技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • 32位老苹果设备怎么越狱?iOS9.1-9.3.4的Trident越狱工具使用教程

    32位老苹果设备越狱攻略:iOS 9.1-9.3.4 1. 准备工作 在开始越狱之前,请确保你已经完成以下准备工作:- 一台32位老苹果设备,运行iOS 9.1-9.3.4版本。- 一台运行Windows或Mac OS的电脑。- 最新版本的iTunes已经安装在你的电脑上。- 一个可用的USB数据线。 2. 下载Trident越狱工具 Trident是一款专…

    other 2023年7月28日
    00
  • idea下Android各目录所代表的含义介绍

    idea下Android各目录所代表的含义介绍 在使用IntelliJ IDEA进行Android开发时,项目中的各个目录有着不同的含义和用途。下面是对常见的Android项目目录的介绍: app:该目录是Android项目的主要模块,包含了应用程序的源代码、资源文件和配置文件等。在该目录下,通常会包含以下子目录: src:该目录包含了应用程序的源代码,按照…

    other 2023年10月13日
    00
  • Android TextView实现多文本折叠、展开效果

    Android TextView实现多文本折叠、展开效果攻略 在Android开发中,我们经常需要在TextView中显示大段的文本内容。为了提高用户体验和节省屏幕空间,我们可以实现多文本折叠和展开效果。下面是一个完整的攻略,包含了两个示例说明。 示例1:使用ReadMoreTextView库实现多文本折叠、展开效果 首先,在项目的build.gradle文…

    other 2023年9月6日
    00
  • ubuntu中ipconfig命令找不到

    以下是“ubuntu中ipconfig命令找不到”的完整攻略: ubuntu中ipconfig命令找不到 在Ubuntu中,ipconfig命令是Windows中的命令,用于显示网络配置。在Ubuntu中,我们需要使用ifconfig命令来显示网络配置信息。以下是解决ipconfig命令找不到的步骤: 1. 使用ifconfig命令 在Ubuntu中,我们可…

    other 2023年5月7日
    00
  • Varnish配置文件详解(架构师之路)

    接下来我将详细讲解“Varnish配置文件详解(架构师之路)”的完整攻略,内容如下: 一. 简述Varnish Varnish是一款高性能的web应用程序加速器,它可将请求转发给多个应用服务器并缓存响应,以提升应用程序的性能和可扩展性。在使用Varnish时,我们需要编写Varnish配置文件,以指定Varnish的行为,下面是一个Varnish配置文件的示…

    other 2023年6月25日
    00
  • React Class组件生命周期及执行顺序

    React Class组件生命周期是React组件在挂载、更新和卸载时所执行的方法集合。这个过程中,React会自动调用这些方法,让我们更好地管理组件的状态和行为。这篇攻略将深入讲解React Class组件生命周期及其执行顺序,以及如何正确使用它们来构建可扩展的React应用程序。 什么是React Class组件生命周期 React Class组件生命周…

    other 2023年6月27日
    00
  • 微信小程序实现九宫格效果

    gridData: [1, 2, 3, 4, 5, 6, 7, 8, 9] }}) 2. 在wxml文件中使用`wx:for`指令来遍历数组,并动态渲染九宫格,例如: “`html <view class=\"grid-container\"> <view class=\"grid-item\" w…

    other 2023年9月7日
    00
  • Win10 19H2慢速预览18362.10019怎么手动升级?

    当你想要手动升级Win10 19H2慢速预览18362.10019时,可以按照以下步骤进行: 步骤一:确认当前系统版本号 首先需要确认一下自己当前系统的版本号,可以按照以下步骤进行: 打开“设置”应用,在“系统”选项卡中找到“关于”选项; 在“关于”选项中,可以查看到当前系统的版本号。 当前Win10 19H2慢速预览的版本号为18362.10019。 步骤…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部