如何将FORM从HTML发布到ASPX页面

时间:2008-10-16 16:22:30

标签: asp.net

如何将表单从HTML页面发布到ASPX页面(2.0)并能够读取值?

我目前有一个使用成员资格提供程序的ASP.NET站点,一切正常。用户可以从Login.aspx页面登录。

我们现在希望能够让用户直接从其他网站登录 - 这基本上是一个静态HTML页面。用户需要能够在此HTML页面上输入他们的名称和密码,并将其POST到我的Login.aspx页面(我可以手动登录)。

是否可以将表单值从HTML传递到ASPX?我已经尝试了一切,Request.Form.Keys集合总是空的。我不能使用HTTP GET,因为它们是凭据,不能在查询字符串上传递。

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

9 个答案:

答案 0 :(得分:28)

非常可能。我嘲笑了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),因为某些东西可能不会出现在您期望的位置。

答案 1 :(得分:19)

如果您的html输入都没有NAME,则Request.Form.Keys集合将为空。在你做了一段时间的.NET之后,很容易忘记将它们放在那里。只需命名它们就可以了。

答案 2 :(得分:2)

您确定您的HTML表单是否正确,并且实际上是否进行了HTTP POST?我建议运行Fiddler2,然后尝试通过您的Login.aspx,然后远程HTML站点登录,然后比较发送到服务器的请求。对我来说,ASP.Net总是工作正常 - 如果HTTP请求包含有效的POST,我可以使用Request.Form获取值......

答案 3 :(得分:1)

你确定可以。

查看如何执行此操作的最简单方法是浏览到要发布到的aspx页面。然后将该页面的源保存为HTML。更改新html页面上表单的操作,以指回最初复制它的aspx页面。

在表单字段中添加值标记,并将所需数据放在那里,然后打开页面并点击提交按钮。

答案 4 :(得分:1)

你确定可以。创建一个HTML页面,其中包含login.aspx页面中的必要组件(即用户名等),并确保它们具有相同的ID。为了你的行动,请确保它是一个帖子。

您可能必须在Page_Load函数的login.aspx页面上执行一些代码来读取表单(在Request.Form对象中)并调用相应的函数来记录用户,但除此之外,您应该可以访问表单,并可以用它做你想做的事。

答案 5 :(得分:1)

在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"以防止空视图状态的验证错误。 Code Behind / Inherits值不准确。

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));
    }
}

答案 6 :(得分:0)

希望这会有所帮助 - 把这个标签放在html和

删除你的login.aspx设计内容..只写页面指令

您将在提交按钮单击后获取aspx页面中的值 像这样- protected void Page_Load(object sender,EventArgs e)         {

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

public void CompleteRegistration()         {

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

答案 7 :(得分:0)

删除数据发布/发布的.aspx页的runat =“ server”部分。

答案 8 :(得分:-1)

我在 https://www.mikesdotnetting.com/article/293/request-form-is-empty-when-posting-to-aspx-page 中找到了一个可行的解决方案。关键是,从 action 属性中删除 .aspx。

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