Как отправить форму с HTML на страницу ASPX
Как отправить форму с страницы HTML на страницу ASPX (2.0) и уметь читать значения?
В настоящее время у меня есть сайт ASP.NET с использованием поставщика членства, и все работает нормально. Пользователи могут входить в систему со страницы Login.aspx.
Теперь мы хотим, чтобы пользователи могли входить в систему напрямую с другого веб-сайта, который в основном представляет собой статическую HTML-страницу. Пользователи должны иметь возможность вводить свое имя и пароль на этой странице HTML и иметь ее POST на моей странице Login.aspx(где я могу их вручную зарегистрировать).
Можно ли передавать значения форм из HTML в ASPX? Я пробовал все, и коллекция Request.Form.Keys всегда пуста. Я не могу использовать HTTP GET, поскольку это учетные данные и не может быть передан в строке запроса.
Единственный способ, которым я знаю, - это iframe.
Ответы
Ответ 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"];
}
}