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。
Webform1。aspx
<form id="form1" runat="server" action="WebForm2.aspx" method="post">
假设我理解你想要完成什么-如果你想覆盖WebForms的PostBack
机制,一个简单的方法是使用PostBackUrl
与Button
控件。
这就是ASP。Net WebForms工作(回发到同一页面)。还有其他的方式来发布到另一个WebForms页面,但先尝试PostBackUrl
,看看这是不是你真正需要的(阻力最小)。
你可以查看ASP。如果你想使用更"标准化"的方式做事情(比如简单地想要POST到你选择的资源),我认为你想要完成的。
Hth…
更新
好吧,你不会喜欢我的答案,因为"视情况而定" -
在ASP.net WebForms中的"通用方式"实际上是相同的页面-默认的PostBack机制,然后你可以像上面那样处理显示-但是通过
controls
(例如Placeholder
或user controls
)。您还可以查看向导控件->对于那些需要引导用户通过
Steps
的情况有用-例如,也许一个应用程序表单很长,您想将其切割成更易于管理的步骤 -在使用Postback
机制的单个Page
中自行拼凑这个,甚至多个Page
s(跨页面发布)虽然可行,但可能是一种自我惩罚的练习:)有其他的方法,但我不想混淆和保持主题(例如AJAX)。
我将推迟"安全",因为您需要更具体地说明这一点-也许值得单独提问。通常操作规则是"不要相信客户端"(意思是验证所有客户端提供给你的应用程序的所有数据),服务器端 -不仅仅是客户端验证(它们应该携手合作,而不是相互排斥)。
Hth…
3
更新当使用两个文件时,我看到IsPostBack属性等于false。当使用单个文件时,我看到IsPostBack属性在提交时等于true。该属性是否仅在使用单个文件时才更改(因此有用)?
IsPostBack
的意思是"这个POST请求来自我自己吗?"
- 所述。aspx ->
Button.PostBackUrl
-> Page2。aspx =IsPostBack
isfalse
- 所述。aspx ->任何触发postback =
IsPostBack
的按钮/控件都是true
话虽如此,"only useful"——在这个简单的例子中也许。但是您可以将该检查用于其他事情—您前面提到了安全性,因此您可以检查页面是否可以/将要/应该接受来自任何的POST请求。
在您的示例中,POST的目标页面(当使用2页和PostBackUrl
时)应该检查/验证它正在接收的POST数据-因为任何人都可以做您刚刚做的相同的事情(POST到它)。