Подтвердить что ты не робот

Как отправить форму с HTML на страницу ASPX

Как отправить форму с страницы HTML на страницу ASPX (2.0) и уметь читать значения?

В настоящее время у меня есть сайт ASP.NET с использованием поставщика членства, и все работает нормально. Пользователи могут входить в систему со страницы Login.aspx.

Теперь мы хотим, чтобы пользователи могли входить в систему напрямую с другого веб-сайта, который в основном представляет собой статическую HTML-страницу. Пользователи должны иметь возможность вводить свое имя и пароль на этой странице HTML и иметь ее POST на моей странице Login.aspx(где я могу их вручную зарегистрировать).

Можно ли передавать значения форм из HTML в ASPX? Я пробовал все, и коллекция Request.Form.Keys всегда пуста. Я не могу использовать HTTP GET, поскольку это учетные данные и не может быть передан в строке запроса.

Единственный способ, которым я знаю, - это iframe.

4b9b3361

Ответ 1

Это очень возможно. Я высмеял 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), потому что что-то, вероятно, не происходит там, где вы ожидаете.

Ответ 2

Коллекция Request.Form.Keys будет пуста, если ни один из ваших входов html не имеет NAME. Легко забыть поместить их туда после того, как вы некоторое время выполняете .NET. Просто назовите их, и вам будет хорошо.

Ответ 3

Вы уверены, что ваша HTML-форма верна и действительно делает HTTP POST? Я предлагаю запустить Fiddler2, а затем попытаться войти в систему через ваш Login.aspx, затем удаленный сайт HTML, а затем сравнить запросы, которые отправляются на сервер. Для меня ASP.Net всегда работал нормально - если HTTP-запрос содержит действительный POST, я могу получить значения с помощью Request.Form...

Ответ 4

Вы уверены, что можете.

Самый простой способ увидеть, как вы можете это сделать, - перейти на страницу aspx, на которую вы хотите отправить сообщение. Затем сохраните источник этой страницы как HTML. Измените действие формы на новой странице html, чтобы вернуться к странице aspx, с которой вы ее скопировали.

Добавьте теги значений в поля формы и поместите нужные вам данные, затем откройте страницу и нажмите кнопку отправки.

Ответ 5

Вы уверены, что можете. Создайте HTML-страницу с формой в ней, которая будет содержать необходимые компоненты на странице login.aspx(например, имя пользователя и т.д.) И убедитесь, что у них одинаковые идентификаторы. Для вашего действия, убедитесь, что это сообщение.

Вам может потребоваться выполнить некоторый код на странице login.aspx в функции Page_Load, чтобы прочитать форму (в объекте Request.Form) и вызвать соответствующие функции для входа пользователя в систему, но кроме этого, вы должны имеют доступ к форме и могут делать то, что вы хотите с ней.

Ответ 6

В форме 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));
    }
}

Ответ 7

Надеюсь, это поможет - Поместите этот тег в html и

удалите содержимое вашего сайта login.aspx. Просто напишите только директиву страницы

и вы получите значения на странице aspx после нажатия кнопки отправки как это- protected void Page_Load (отправитель объекта, EventArgs e)       {

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

public void CompleteRegistration()       {

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