【问题标题】:server.Transfer with query stringserver.Transfer 与查询字符串
【发布时间】:2009-08-07 05:38:12
【问题描述】:

我是初学者,正在学习以 C# 作为编程语言的 ASP.NET。

目前我正在使用 HTTPSERVERUTILITY。

我创建了一个名为 Default.aspx 和 Default2.aspx 的 Web 表单:

我写了以下代码:

默认.aspx:

在源代码视图中

    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />

</div>
</form>

在代码隐藏文件中:

protected void Button1_Click(object sender, EventArgs e) {

    Server.Transfer("Default2.aspx ? name =roseline & password = pass@123");
}

Default2.aspx 的编码:

在源代码视图中:






在代码隐藏文件中:

public string n, p;
protected void Page_Load(object sender, EventArgs e)
{
    n = Request.QueryString["name"];
    p = Request.QueryString["password"];

}
protected void Button1_Click(object sender, EventArgs e)
{
    TextBox1.Text = n;
    TextBox2.Text = p;
}

当我执行上述应用程序时,我没有收到任何错误。

当我单击 Default.aspx 中的 Button1 时,它会显示 Default2.aspx,但是当我单击按钮时,我没有获取 TextBox 中的值,TextBoxes 是空的,没有任何值。

谁能告诉我我的编码有什么问题?为什么它不显示文本框中的值?

请帮帮我!

提前致谢!

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    您不能在 Server.Transfer 中附加查询字符串。

    你可以在上下文中传递值

    例如:

    Context.Items["ParamName"] = value;
    

    Server.Transfer 和 Response.Redirect 的区别可以从here得到

    【讨论】:

    • 我正在关注一本书,因为我有相同的编码,但即便如此它也没有执行所需的任务。在那本书中,Server.Transfer 方法仅用于查询字符串。
    【解决方案2】:

    你可以这样用。

     string url = $"~/Registration.aspx?price={price}&membershipId={membershipId}";
     Server.Transfer(url);
    

    要读取值,您只需使用:

    string membershipId = Request.QueryString["membershipId"];
    

    【讨论】:

      【解决方案3】:

      尝试使用

      Response.Redirect("default.aspx?name =roseline&password=pass@123");
      

      相反。 有关 Response.Redirect 和 Server.Transfer 之间差异的更多信息,请参阅this 页面。

      编辑:响应速度有点快,Response.Redirect 不使用 HttpServerUtility 类。但是我会说使用 Response.Redirect 是解决此问题的正常方法。

      【讨论】:

        【解决方案4】:

        来源.aspx

        protected void Button1_Click(object sender, EventArgs e)
            {
                HttpContext _context = HttpContext.Current;
                _context.Items.Add("name", roseline);
                _context.Items.Add("password", pass@123);
               Server.Transfer("Destination.aspx");
            }
        

        目标.aspx

        protected void Page_Load(object sender, EventArgs e)
            {
                HttpContext _context = HttpContext.Current;
                Response.Write(_context.Items["name"]);
                Response.Write(_context.Items["password"]);
             }
        

        【讨论】:

          【解决方案5】:

          改用 Response.Redirect:

           Response.Redirect("Default2.aspx?name=roseline&password=pass@123");
          

          但是,您的值将在 url 中可见,这可能不切实际。还有许多其他在页面请求之间传输值的方法,各有优缺点。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-01-14
            • 2021-04-22
            • 2013-01-20
            • 1970-01-01
            • 1970-01-01
            • 2021-05-24
            • 2010-10-06
            相关资源
            最近更新 更多