ASP.NET如何访问公共属性?

时间:2010-06-14 10:18:50

标签: asp.net

我有两页page1.aspx和page2.aspx,两者都有部分类的代码。 如何从page2.aspx访问page1.aspx上的公共属性消息?

public string message { get; set; }

5 个答案:

答案 0 :(得分:2)

更新

我刚看到一个是MasterPage而另一个是masterpage的客户端? 然后是不同的方式。

Page to Page

如果您有2个简单的不同页面。 我这样做了。 它是一个post值,通过使用asp.net技巧:)

Page2.aspx 上添加此内容。

<%@ PreviousPageType VirtualPath="Page1.aspx" %>

以及我如何从Page1.aspx读取

背后的代码
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        if (Page.PreviousPage != null)
        {
            if(Page.PreviousPage.IsCrossPagePostBack == true)
            {
                txtGetItFromPreviusPage.Text = PreviousPage.SomeString;
            }
        }
    }
}

Page1.aspx 上 将我发送到Page2.aspx的按钮

<asp:Button ID="btnEna" runat="server"  Text="Send Some variables to other page" 
    PostBackUrl="Page2.aspx" 
    onclick="btnMoveSelection_Click" />                 

和我用于Page1计算或其他思考的代码

public string SomeString
{
    set 
    { 
        ViewState["txtSomeString"] = value;
    }
    get
    {
        if (ViewState["txtSomeString"] != null)
            return ViewState["txtSomeString"].ToString();
        else
            return string.Empty;
    }
}


protected void btnMoveSelection_Click(object sender, EventArgs e)
{
    // some final calculations

}   

答案 1 :(得分:1)

如果一个是主页面,另一个是使用主页面的页面。

母版页

<body>
    <form id="form1" runat="server">
    <div>
        <asp:Literal runat="server" ID="txtOnMaster"></asp:Literal>
        <br />
        <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">        
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>

和背后的代码

public partial class Dokimes_StackOverFlow_MasterPage : System.Web.UI.MasterPage
{
    public string TextToMaster
    {
        get { return txtOnMaster.Text; }
        set { txtOnMaster.Text = value; }        
    }


    protected void Page_Load(object sender, EventArgs e)
    {
        // here I find the control in the client page
        Control FindMe = ContentPlaceHolder1.FindControl("txtOut");

        // and if exist I set the text to client from the master   
        if (FindMe != null)
        {
            ((Literal)FindMe).Text = "Get from Master Page";
        }
    }
}

现在是具有previus主页的Page1.aspx

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:Literal runat="server" ID="txtOut"></asp:Literal>  
</asp:Content>

和代码

protected void Page_Load(object sender, EventArgs e)
{
    // here I set the text on master page from client
    ((Dokimes_StackOverFlow_MasterPage)Master).TextToMaster = "Set from Client";
}

答案 2 :(得分:1)

如果您不在无会话环境中,那么在发射器页面中,将您的字符串(或您的对象 - 例如,词典)推送到会话中:

Session("MyVar") = "WhatEver"

在接收者页面中,您可以通过以下方式取回:

MyPreviousVar = Session("MyVar")

答案 3 :(得分:0)

你不应该这样做,页面应该是独立的实体。如果您需要将此数据从一个表单传递到另一个表单,请考虑使用查询字符串,或将表单发​​布到第二页。


行。你有没有试过Page.Master.Property?

答案 4 :(得分:0)

如果您想在每个页面上都有一个消息属性。您可以实现自己的BasePage并在基页中定义message属性。然后从您的自定义基页派生后续页面。这样,您的所有页面都将始终具有消息属性。

但是,这并不会使每个页面的消息属性保持不变。如果您尝试在页面之间传递值,则应使用会话状态或查询字符串

MSDN页面可能对您有用。

相关问题