簡體   English   中英

如何將表單從 HTML POST 到 ASPX 頁面

[英]How to POST a FORM from HTML to ASPX page

如何將表單從 HTML 頁面發布到 ASPX 頁面 (2.0) 並能夠讀取值?

我目前有一個使用 Membership 提供程序的 ASP.NET 站點,並且一切正常。 用戶可以從 Login.aspx 頁登錄。

我們現在希望能夠讓用戶直接從另一個網站登錄——這基本上是一個靜態的 HTML 頁面。 用戶需要能夠在此 HTML 頁面上輸入他們的姓名和密碼,並將其 POST 到我的 Login.aspx 頁面(然后我可以在其中手動登錄)。

是否可以將表單值從 HTML 傳遞到 ASPX? 我已經嘗試了所有方法,但 Request.Form.Keys 集合始終為空。 我不能使用 HTTP GET,因為這些是憑據,不能通過查詢字符串傳遞。

我所知道的唯一方法是 iframe。

這是很有可能的。 我模擬了 3 頁,應該可以給你一個概念證明:

.aspx 頁面:

<form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:TextBox TextMode="password" ID="TextBox2" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </div>
</form>

后面的代碼:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    For Each s As String In Request.Form.AllKeys
        Response.Write(s & ": " & Request.Form(s) & "<br />")
    Next
End Sub

單獨的 HTML 頁面:

<form action="http://localhost/MyTestApp/Default.aspx" method="post">
    <input name="TextBox1" type="text" value="" id="TextBox1" />
    <input name="TextBox2" type="password" id="TextBox2" />
    <input type="submit" name="Button1" value="Button" id="Button1" />
</form>

...它會按預期反芻形式值。 如果這不起作用,正如其他人建議的那樣,請使用流量分析工具(fiddler、ethereal),因為某些事情可能不會發生在您期望的地方。

如果您的 html 輸入都沒有名稱,則 Request.Form.Keys 集合將為空。 在您使用 .NET 一段時間后,很容易忘記將它們放在那里。 只需為它們命名,您就可以開始了。

您確定您的 HTML 表單是正確的,並且確實執行了 HTTP POST? 我建議運行Fiddler2 ,然后嘗試通過 Login.aspx 登錄,然后是遠程 HTML 站點,然后比較發送到服務器的請求。 對我來說,ASP.Net 總是工作正常——如果 HTTP 請求包含有效的 POST,我可以使用 Request.Form 獲取值...

你肯定可以。

查看如何執行此操作的最簡單方法是瀏覽到要發布到的 aspx 頁面。 然后將該頁面的源代碼另存為 HTML。 將表單在新 html 頁面上的操作更改為指向您最初從中復制它的 aspx 頁面。

將值標簽添加到您的表單字段並將您想要的數據放入其中,然后打開頁面並點擊提交按鈕。

你肯定可以。 創建一個 HTML 頁面,其中包含來自 login.aspx 頁面的必要組件(即用戶名等),並確保它們具有相同的 ID。 對於您的操作,請確保它是一個帖子。

您可能需要在 Page_Load 函數中的 login.aspx 頁面上執行一些代碼來讀取表單(在 Request.Form 對象中)並調用適當的函數來登錄用戶,但除此之外,您應該有權訪問的形式,並可以用它做你想做的事。

在 html 表單中,您需要提供額外的 viewstate 變量並在服務器頁面中禁用 ViewState。 不過,這需要雙方進行一些控制。

表單 HTML:

<html><body> <form id='postForm' action='WebForm.aspx' method='POST'>
        <input type='text' name='postData' value='base-64-encoded-value' />
        <input type='hidden' name='__VIEWSTATE' value='' />  <!-- still need __VIEWSTATE, even empty one -->
    </form>

</body></html>

注意空的 __VIEWSTATE。

WebForm.aspx:

<%@ Page Language="C#" AutoEventWireup="true" 
CodeBehind="WebForm.aspx.cs" Inherits="WebForm"
 EnableEventValidation="False" EnableViewState="false" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="postForm" runat="server">
        <asp:TextBox ID="postData" runat="server"></asp:TextBox>
    <div>

    </div>
    </form>
</body>
</html>

注意EnableEventValidation="False", EnableViewState="false"以防止空視圖狀態的驗證錯誤。 代碼隱藏/繼承值不精確。

WebForm.cs:

public partial class WebForm : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string value = Encoding.Unicode.GetString(Convert.FromBase64String(this.postData.Text));
    }
}

希望這會有所幫助 - 將此標簽放在 html 中並

刪除您的 login.aspx 設計內容..只寫頁面指令

並且您將在提交按鈕單擊后獲得 aspx 頁面中的值,如下所示 - protected void Page_Load(object sender, EventArgs e) {

        if (!IsPostBack)
        {
            CompleteRegistration();
        }
    }

公共無效完成注冊(){

        NameValueCollection nv = Request.Form;
        if (nv.Count != 0)
        {
            string strname = nv["txtbox1"];
            string strPwd = nv["txtbox2"];
        }
    }

刪除數據發布/發布 .aspx 頁面的 runat="server" 部分。

我在https://www.mikesdotnetting.com/article/293/request-form-is-empty-when-posting-to-aspx-page找到了一個有效的解決方案。 關鍵是,從 action 屬性中刪除 .aspx。

例如: <FORM NAME="Logon" action="default" method="post">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM