【问题标题】:Using ASP.Net PostBackUrl to pass value to a Label使用 ASP.Net PostBackUrl 将值传递给标签
【发布时间】:2015-12-08 10:55:39
【问题描述】:

我想使用 PostBackUrl 将 TextBox1 的值从一个页面传递到另一个页面。所以这是第一页的代码。

<form id="form1" runat="server">
    <div>
        <h2>Working With the Previous Page Object</h2>

        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="~/Default7.aspx"/>

    </div>
    </form>

现在,这是从第一页检索值的页面代码:

protected void Page_Load(object sender, EventArgs e)
    {
        Page previousPage = Page.PreviousPage;
        if(previousPage != null)
        {
            Label1.Text = ((TextBox)previousPage.FindControl("TextBox1")).Text;
        }
    }

当然,我在从第一页检索 TextBox1 值的页面上插入了一个名为“Label1”的标签。

我看到很多教程都在做完全相同的事情,但它对我不起作用,我不知道为什么。欢迎任何帮助。

【问题讨论】:

  • 这是网络表单还是网络内容表单?
  • 您是否在此处收到任何错误/异常?
  • 对我不起作用不会帮助任何人理解实际问题。你有什么错误吗?你调试过你的代码吗?这是帮助自己的最佳方式。
  • 这是一个 Web 表单,我在屏幕上或控制台上都没有收到任何错误消息,如果我在 if 语句中放置断点,我发现它没有通过if 语句。如果我删除 if 语句,则会收到 nullException 错误。
  • @pancy1 - 您的第一页是否在母版页中?

标签: asp.net postbackurl


【解决方案1】:

可能在这里,FindControl() 无法识别任何名为 TextBox1 的控件,这是您在设计代码中提供的 ID。

您可以尝试在 FindControl() 中使用该控件的完整唯一 ID,如下所示:

Label1.Text = ((TextBox)previousPage.FindControl("ctl00$ContentPlaceHolder1$TextBox1")).Text;

此唯一 ID 将是在运行时将控件呈现为 HTML 时生成的 ID。您可以使用浏览器中的检查元素从 HTML 源代码中读取它。

作为另一种选择,您也可以尝试先查找ContentPlaceHolder,然后查找其中包含给定ID 的TextBox

希望这会有所帮助。

【讨论】:

  • 嗨,马特,感谢您的贡献,但没有奏效。
  • @pancy1 - 我尝试使用你的代码,我成功地得到了结果!我希望您没有直接粘贴我的答案而不更改控件 ID。
  • 我在萤火虫中获得了 TextBox1 作为唯一 ID
  • 这很奇怪。正如您所提到的,您没有使用母版页,这意味着您的页面不会有任何 ContentPlaceHolder。我碰巧在 Firebug 中测试了同样的场景,但我仍然得到了我在回答中提到的 UniqueID。我建议你检查一下 chrome,看看 UniqueID 是什么。
  • 我在Chrome中得到相同的ID,问题是它不执行if语句!但我不知道如何解决它。欢迎任何帮助
【解决方案2】:

样本

WebForm1.aspx

<form id="form1" runat="server" action="WebForm2.aspx" method="post"> 
<div>
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="Button" UseSubmitBehavior="true" />
</div>
</form>

WebForm2.aspx.cs

protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(Request.Form.GetValues("TextBox1")[0]);
    }

【讨论】:

  • 感谢 Tonton 的贡献,但没有成功。
【解决方案3】:

WebForm1.aspx

<form id="form1" runat="server"> 
    <div>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
    </div>
    </form>

WebForm1.aspx.cs

protected void Button1_Click(object sender, EventArgs e)
        {
            Session["TextBox1Value"] = TextBox1.Text;
            Response.Redirect("WebForm2.aspx");
        }

WebForm2.aspx.cs

protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(Session["TextBox1Value"]);
        }

【讨论】:

  • 非常感谢我知道 Session 方法,我只是想看看 PostBackUrl 如何按照我的问题标题描述的那样工作!
猜你喜欢
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 2013-12-25
  • 2013-07-02
相关资源
最近更新 更多