ASP.NET如何用post方法发送数据

本文关键字:数据 方法 post NET 何用 ASP | 更新日期: 2023-09-27 18:05:53

案例

我有两个web表单和一些代码。第一个webform是一个公式,我输入一个字符串。我想使用post方法将该字符串发送到第二个公式,并显示它。

我得到一个错误消息,说MAC视图状态无法验证:

服务器不支持'应用程序'/'。Échec de la validation MAC视图状态。电子应用程序测试了与电池相关的所有电子设备UN集群下的服务器,保证-vous的配置spsamcifie le même validationKey et le même算法验证。AutoGenerate ne peut pas être utiliscastans uncluster .

我做错了什么?

Webform1.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server" action="WebForm2.aspx" method="post">
        <div>
            Enter your first name : <input type="text" name="FirstName"/><br />
            <input type="submit" />
        </div>
    </form>
</body>
</html>

Webform2.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication1.WebForm2" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            First name : <%= FirstName %>
        </div>
    </form>
</body>
</html>

Webform2.aspx.cs

public partial class WebForm2 : System.Web.UI.Page
{
    public string FirstName { get; private set; }
    protected void Page_Load(object sender, EventArgs e)
    {
        FirstName = Request.Form["FirstName"];
    }
}

注意:我对网络技术的经验很少,我正在努力学习asp.net和html,所以请原谅我。


EDIT:

他看到

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="WebApplication1.WebForm3" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <%if (!IsPostBack){ %>
        <div>
            Enter your first name :
            <input type="text" name="FirstName" /><br />
            <input type="submit" />
        </div>
        <% } else { %>
        <div>
            First name : <%= FirstName %>
        </div>
         <% } %>
    </form>
</body>
</html>

WebForm3.aspx.cs

public partial class WebForm3 : System.Web.UI.Page
    {
        public string FirstName { get; private set; }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                FirstName = Request.Form["FirstName"];
            }
        }
    }

WebForm1。aspx(修订)

<form id="form1" runat="server" method="post">
        <div>
            Enter your first name : <input type="text" name="FirstName"/><br />
            <asp:Button PostBackUrl="~/WebForm2.aspx" Text="Validate" runat="server"/>
        </div>
    </form>

WebForm3。使用asp:按钮的WebForm1也可以正常工作,非常感谢。

附加问题:

此测试的目的是寻找以"常见"方式发送数据的其他方法(post方法,因为"他们"说这是最安全的方式)。现在,我只剩下一个问题:使用两个文件(WebForm1和WebForm2方法)或单个文件(WebForm3方法)的最佳实践是什么?换句话说,应该由同一个页面负责收集和处理数据,还是应该将这些职责划分到两个文件中?


编辑2,最后一题

当使用两个文件时,我看到IsPostBack属性等于false。当使用单个文件时,我看到IsPostBack属性在提交时等于true。

ASP.NET如何用post方法发送数据

该属性是否仅在使用单个文件时更改(因此有用)?

Webform1。aspx

<form id="form1" runat="server" action="WebForm2.aspx" method="post">

假设我理解你想要完成什么-如果你想覆盖WebForms的PostBack机制,一个简单的方法是使用PostBackUrlButton控件。

这就是ASP。Net WebForms工作(回发到同一页面)。还有其他的方式来发布到另一个WebForms页面,但先尝试PostBackUrl,看看这是不是你真正需要的(阻力最小)。

你可以查看ASP。如果你想使用更"标准化"的方式做事情(比如简单地想要POST到你选择的资源),我认为你想要完成的。

Hth…


更新

好吧,你不会喜欢我的答案,因为"视情况而定" -

  • 在ASP.net WebForms中的"通用方式"实际上是相同的页面-默认的PostBack机制,然后你可以像上面那样处理显示-但是通过controls(例如Placeholderuser controls)。

  • 您还可以查看向导控件->对于那些需要引导用户通过Steps的情况有用-例如,也许一个应用程序表单很长,您想将其切割成更易于管理的步骤 -在使用Postback机制的单个Page中自行拼凑这个,甚至多个Page s(跨页面发布)虽然可行,但可能是一种自我惩罚的练习:)

  • 有其他的方法,但我不想混淆和保持主题(例如AJAX)。

  • 我将推迟"安全",因为您需要更具体地说明这一点-也许值得单独提问。通常操作规则是"不要相信客户端"(意思是验证所有客户端提供给你的应用程序的所有数据),服务器端 -不仅仅是客户端验证(它们应该携手合作,而不是相互排斥)。

Hth…


3

更新

当使用两个文件时,我看到IsPostBack属性等于false。当使用单个文件时,我看到IsPostBack属性在提交时等于true。该属性是否仅在使用单个文件时才更改(因此有用)?

IsPostBack的意思是"这个POST请求来自我自己吗?"

  1. 所述。aspx -> Button.PostBackUrl -> Page2。aspx = IsPostBack is false
  2. 所述。aspx ->任何触发postback = IsPostBack的按钮/控件都是true

话虽如此,"only useful"——在这个简单的例子中也许。但是您可以将该检查用于其他事情—您前面提到了安全性,因此您可以检查页面是否可以/将要/应该接受来自任何的POST请求。

在您的示例中,POST的目标页面(当使用2页和PostBackUrl时)应该检查/验证它正在接收的POST数据-因为任何人都可以做您刚刚做的相同的事情(POST到它)。