ASP.NET中动态加载用户控件并传值

最近遇到了一个问题,就是自定义了一个用户控件,然后要做的就是通过循环来在前台将这个用户控件展示出来并传递给其一个值,可是一直没有找到解决办法,刚开始想的使用js或者ajax来实现也没有成功.不过今天终于找到了解决办法,贴出来分享给大家.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BAL;
namespace blog.UserControl
{
    public partial class PostList : System.Web.UI.UserControl
    {
        private int thepostid;
        public void setid(int id)
        {
            this.thepostid = id;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            Dictionary<string, string> mypost = BAL.DoPost.getpost(thepostid);
            labpostid.Text = mypost["postid"].ToString();
            labpostname.Text = mypost["postname"].ToString();
            labpostcontent.Text = mypost["postcontent"].ToString();
            labpostdata.Text = mypost["postdata"].ToString();
            labpostuser.Text = mypost["postuser"].ToString();
        }
    }
}

这个是用户控件的后台部分代码.然后前台调用的话可以使用下面的办法

<%@ Register Src="UserControl/PostList.ascx" TagName="UserControl" TagPrefix="UserPost" %>
<%-- 在页面前面部分添加这段代码--%>
<UserPost:UserControl id="postcontent1" runat="Server" thepostid="1" />
<%--要调用该控件部分添加这段代码--%>

还有一种方式,可以再后台来为前台添加此控件,这样可以用循环来实现,这样对于要添加多个该控件的话就会方便很多.
前台代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="blog.Index" %>

<%--<%@ Register Src="UserControl/PostList.ascx" TagName="UserControl" TagPrefix="UserPost" %>--%>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript" src="INC/jquery-1.11.1.js"></script>
    <link type="text/css" rel="stylesheet" href="INC/dist/css/bootstrap.css" />
    <link type="text/css" rel="stylesheet" href="INC/dist/css/bootstrap-theme.css" />
    <script type="text/javascript" src="INC/dist/js/bootstrap.js"></script>

</head>
<body>
    <form id="form1" runat="server">
        <div>
            <div id="showposts">
                <asp:Panel ID="postpanel" runat="server">
                </asp:Panel>
            </div>
            <div id="relatepost"></div>

        </div>
    </form>
</body>
</html>

后台代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BAL;
namespace blog
{
    public partial class Index : blog.Class.PageBase
    {
        public int num=1;
        protected void Page_Load(object sender, EventArgs e)
        {
            Ajax.Utility.RegisterTypeForAjax(typeof(blog.Index));
            for (int i = 1; i <= BAL.DoPost.getmaxpost();i++ )
            {
                
                UserControl.PostList postlist =(UserControl.PostList) LoadControl("~/UserControl/PostList.ascx");
                //为用户控件传递值
                postlist.setid(i);
               //加载该用户控件到前台容器中.
                postpanel.Controls.Add(postlist);

              //还有一种方法.如果不需要传值,也不用再前台添加<%@ Register Src=\'#\'" 
              // postpanel.Controls.Add(TemplateControl.LoadControl("~/UserControl/PostList.ascx"));
            }
        }
        [Ajax.AjaxMethod()]
        public int getmaxnum()
        {
            return BAL.DoPost.getmaxpost();  
        }
        [Ajax.AjaxMethod()]
        public int getnextnum()
        {
            return num++;
        }
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注