简单 HTTP Post 返回空 Request.Form

Simple HTTP Post returning empty Request.Form

我正在尝试一个简单的 HTTP post 到 post 数据从一种形式到另一种形式 asp.net。 发件人页面代码

 <form id="form1" runat="server" method="post" action="CILandingPage.aspx">
<asp:TextBox name="txtUname" runat="server" Width="180px"></asp:TextBox>
<asp:TextBox name="txtPassword" runat="server" TextMode="Password" Width="180px"></asp:TextBox>
 <asp:TextBox name="txtTransaction" runat="server" Width="180px"></asp:TextBox>

并且接收者页面有代码

        lblUserName.Text = Request.Form["txtUname"].ToString();
        lblPassword.Text = Request.Form["txtPassword"].ToString();
        lblTransactionID.Text = Request.Form["txtPassword"].ToString();

它抛出 NullReferenceException 因为 Request.Form 对象是空的。

我错过了什么?

由于您正在 posting cross-page,因此 collection 项目 (txtPassword) 可能不存在。您可以尝试将每个控件的 ClientIdMode 设置为静态,以便 HTTP post 中使用的 id 与您在目标页面上的 .Form collection 中查找的内容相匹配。

查看这篇文章以获取有关 cross-page posting 的更多信息:https://msdn.microsoft.com/en-us/library/ms178139%28v=vs.140%29.aspx

使用浏览器调试工具 (F12) 查看 HTTP Post 正文中传输的内容。

设置要post ASP.NET Web 表单页面的PostBackUrl property for the control to the URL 页面。

删除 action 并将 添加 PostBackUrlButton。而是名称 使用 ID属性值.

在Default.aspx

<form id="form1" runat="server" method="post">
<div>       
    <asp:TextBox ID="TextBox1" name="txtUname" runat="server" Width="180px"></asp:TextBox>
    <asp:TextBox ID="TextBox2" name="txtPassword" runat="server" TextMode="Password" Width="180px"></asp:TextBox>
    <asp:TextBox ID="TextBox3" name="txtTransaction" runat="server" Width="180px"></asp:TextBox>
    <asp:Button ID="button" PostBackUrl="~/CILandingPage.aspx" runat="server" />           
</div>
</form>

在CILAndinaPage.aspx.cs

using System;

public partial class CILandingPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Response.Write(Request.Form["TextBox1"].ToString() +Environment.NewLine);
            Response.Write(Request.Form["TextBox2"].ToString() + Environment.NewLine);
            Response.Write(Request.Form["TextBox3"].ToString());            
        }
    }
}

您可以使用下一页参考:

protected void Page_Load(object sender, EventArgs e)  
{  
// first check if we had a cross page postback  
    if ( (PreviousPage != null) && (PreviousPage.IsCrossPagePostBack))  
    {  
        Page previousPage = PreviousPage;
        TextBox UserName= (TextBox)previousPage.FindControl("txtUname");
        TextBox Password= (TextBox)previousPage.FindControl("txtPassword");
        // we can now use the values from TextBoxes and display them in two Label controls..
        lblUserName.Text = UserName.Text;
        blPassword.Text = Password.Text;
    }  
}  

Page_Load 中的此代码将引用已发布数据的上一页并帮助您在目标页面上获得相同的数据。

希望对您有所帮助!!