现在的位置: 首页 > 综合 > 正文

PostBackUrl 用户控件页面传值总结

2013年08月11日 ⁄ 综合 ⁄ 共 3086字 ⁄ 字号 评论关闭

PostBackUrl 用户控件页面传值总结
今天在调试邮件发送的时候,发现了Get传递数据的最大值问题,查看

了有关资料说Get方式最大的传递值为2k(包括URL字符)。
因此只能修改代码,换别的方式。本来计划使用POST方式,但是Post方

式无法获取用户控件中的信息,所以此方法作罢。

以下介绍使用Asp.Net 2.0的新特性PostBackUrl进行页面见传值。

一 调用普通控件信息
1 源页面
<asp:Button ID="Button1" Runat="server"

Text="PostToAnotherPage" PostBackUrl="~/Test.aspx" />
2 被提交的页面
如果是普通的控件只需要以下方法即可:
 if (PreviousPage != null)
        {
            TextBox textBox1 = (TextBox)

PreviousPage.FindControl("TextBox1");
           Response.write(textBox1.Text );
        }

二 调用用户控件信息
1 继承方式
(1) PostDataBase.cs
using System.Collections.Generic;

/// <summary>
/// PostDataUrl方式页面传值抽象类
/// </summary>
public abstract class PostDataBase : System.Web.UI.UserControl
{
    public abstract string CheckedORGString { get;}

    public abstract string CheckedORGNameString { get;}

    public abstract List<string> CheckedOrgCodeList { get;}

    public abstract List<string> CheckedOrgNameList { get;}
}

(2) UserControl.ascx.cs代码
public partial class Controls_UserControl :PostDataBase
{
/// <summary>
    /// 获取TreeView选中的单位代码
    /// </summary>
    public override string CheckedORGString
    {
        get
        {
     //Some Codes
        }
    }

    /// <summary>
    /// 获取TreeView选中的单位名称
    /// </summary>
    public override string CheckedORGNameString
    {
        get
        {
            //Some Codes
        }
    }

    /// <summary>
    /// 获取TreeView选中的单位代码
    /// </summary>
    public override List<string> CheckedOrgCodeList
    {
        get
        {
            //Some Codes
            return itemList;
        }
    }

    /// <summary>
    /// 获取TreeView选中的单位名称
    /// </summary>
    public override List<string> CheckedOrgNameList
    {
        get
        {
            //Some Codes
            return itemList;
        }
    }
}
(3) Test.aspx.cs代码
/// <summary>
    /// 获取父页面的单位信息
    /// </summary>
    protected string OrgCodes
    {
        get
        {
            //return PreviousPage.GetOrgCodes;//方式一
            if (ViewState["OrgCodes"] != null)
            {
                return ViewState["OrgCodes"].ToString();
            }

            if (PreviousPage == null)
            {
                return string.Empty;
            }
            PostDataBase hid = PreviousPage.Form.FindControl

("ContentPlaceHolder1").FindControl("orgTree") as

PostDataBase;
            if (hid == null)
            {
                return string.Empty;
            }
            else
            {
                ViewState["OrgCodes"] = hid.CheckedORGString;
                return hid.CheckedORGString;
            }
        }
    }

注意:
如果有模版页嵌套则使用
PostDataBase hid = PreviousPage.Form.FindControl

("ContentPlaceHolder1").FindControl("orgTree") as

PostDataBase;
如果没有则使用
PostDataBase hid = PreviousPage.Form.FindControl("orgTree") as

PostDataBase;

2 实例类方式
(1) Source.aspx.cs代码
定义获取用户控件数据的属性
public string GetOrgCodes
    {
        get
        {      
            string orgCodeList=orgTree.CheckedORGString;
            if (orgCodeList.Trim().Length==0)
            {
                return string.Empty;
            }
            else
            {
                return orgCodeList;
            }
        }
    }

(2) Test.aspx页
<%@ PreviousPageType VirtualPath="Source.aspx" %>
使用PreviousPageType注册后,可以再后台代码中使用智能提示(如果

没有智能提示,编译后再试就有了)

(3) Test.aspx.cs代码
/// <summary>
    /// 获取父页面的单位信息
    /// </summary>
    protected string OrgCodes
    {
        get
        {
            return PreviousPage.GetOrgCodes;
        }
    }

 

抱歉!评论已关闭.