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日

相关文章

  • 分享一个Android设置圆形图片的特别方法

    当在Android应用中设置圆形图片时,可以使用以下方法: 使用BitmapShader和Canvas绘制圆形图片: 首先,加载要显示的图片资源,可以使用BitmapFactory.decodeResource方法。 创建一个空的Bitmap对象,用于绘制圆形图片。可以使用Bitmap.createBitmap方法,并指定宽度和高度。 创建一个BitmapS…

    other 2023年8月25日
    00
  • bootstrap中的导航条实例代码详解

    Bootstrap中的导航条实例代码详解 1. 导航条的基本结构 在Bootstrap中,导航条(Navbar)是一种常见的网站导航组件。它提供了丰富的样式和功能选项。以下是导航条的基本结构: <nav class="navbar navbar-expand-lg navbar-light bg-light"> <a c…

    other 2023年6月28日
    00
  • C++关于类结构体大小和构造顺序,析构顺序的测试详解

    C++关于类结构体大小和构造顺序,析构顺序的测试详解 概述 在C++中,类和结构体具有相同的定义方式,而它们的大小、内存分配方式,构造和析构顺序等等却有所不同。本文将从各个方面渐进式地介绍类和结构体之间的差异,希望能够帮助大家更好地理解和使用C++语言。 类和结构体的内存分配 在C++中,类和结构体可以直接定义成员变量和成员函数,并在其中定义多个类型的数据。…

    other 2023年6月26日
    00
  • markdownpad2下载安装教程

    MarkdownPad2下载安装教程 MarkdownPad2是一款Windows平台上的Markdown编辑器,它提供了一套完整的Markdown编辑和预览功能,支持实时预览、自定义样式、代码高亮等功能。本文将提供一个完整攻略,介绍MarkdownPad2的下载安装方法和注意事项,并提供两个示例说明。 下载安装方法 可以按照以下步骤下载和安装Markdow…

    other 2023年5月8日
    00
  • vbscript Registry 注册表操作实现代码(读写删除)

    以下是使用VBScript操作注册表实现读取、写入和删除的完整攻略: 读取注册表键值 要读取注册表中的键值,可以使用GetObject函数和WScript.Shell对象的RegRead方法。示例代码如下: Set WshShell = CreateObject(\"WScript.Shell\") value = WshShell.Re…

    other 2023年10月15日
    00
  • Java中继承、多态、重载和重写介绍

    我来讲解一下。 继承 继承是Java面向对象编程中的一个重要的特性。它允许我们创建一个新的类,以现有类的特性为基础,从而减少了代码的重复编写。下面是一个简单的继承示例: public class Animal { public void move() { System.out.println("动物可以移动"); } } public c…

    other 2023年6月27日
    00
  • angular项目中使用antd日历组件

    以下是关于“Angular项目中使用Antd日历组件”的完整攻略,过程中包含两个示例。 背景 Antd是一个基于React的UI组件库但是它也提供了一些Angular组件。其中,Antd的日历组件非常实用,可以帮助我们快速构建日历。本攻略将介绍如何在Angular项目中使用Antd日历组件。 基本原理 在Angular项目中使用Antd日历组,我们需要先安装…

    other 2023年5月9日
    00
  • Android使用ViewFlipper实现上下滚动消息

    Android使用ViewFlipper实现上下滚动消息攻略 简介 ViewFlipper是Android中的一个布局容器,它可以让子视图在容器内进行切换显示。通过使用ViewFlipper,我们可以实现上下滚动消息的效果。 步骤 步骤一:添加ViewFlipper到布局文件 首先,在你的布局文件中添加一个ViewFlipper容器,如下所示: <Vi…

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