Преобразовать форму сообщения в строку запроса
Я работаю в ASPDotNetStorefront над пакетом XML (в значительной степени нерелевантным). В основном у меня есть форма с кучей полей и кнопка, которая "отправляет" форму. Я на самом деле хотел бы, чтобы кнопка преобразовывала значения полей в строку запроса, а затем выполняла GET вместо POST.
Я мог бы предположить, что я мог бы сделать что-то подобное с JavaScript, возможно, с помощью jQuery, но я не уверен, как бы я это сделал. В идеале мне нужна простая функция, которую я мог бы вызвать.
Я должен отметить, что я использую ASP.Net и я хочу преобразовать только фактические значения полей в строку запроса, а не какую-либо информацию о состоянии. Это для формы поиска.
5 ответов
Response.Redirect("Webform2.aspx?Name=" +
this.txtName.Text + "&LastName=" +
this.txtLastName.Text);
в WebForm2.aspx вы можете сделать это
for (int i =0;i < Request.QueryString.Count;i++)
{
Response.Write(Request.QueryString[i]);
}
для jquery вы можете использовать AJAX для отправки данных между страницами. Вот пример кода. Это лучшая статья, которую я нашел. Использование jQuery для AJAX в ASP.NET: пример кода проекта использования AJAX.
<div style="width:350px">
<div style="background:#CCC"> <a href="#" id="editName">Edit</a></div>
<div id="divView"><asp:literal id="litName" runat="server"/></div>
<div id="divEdit" style="display:none"></div>
</div>
var options = {
method: 'POST',
url: 'ChangeName.aspx',
after: function(response) {
$("div#divView").html(response).show();
$("div#divEdit").empty().hide();
$("a#editName").show();
}
};
//bind to form's onsubmit event
$("form#ChangeName").ajaxForm(options);
Пример без AJAX. Простой Javascript со строкой запроса
<script lang=”javascript” type=”text/javascript”>
function testQueryStrings()
{
window.location = “search.aspx?q=abc&type=advanced”;
}
</script>
<input type=”button” id=”btn” value=”Test Query Strings” onclick=”testQueryStrings()” />
для search.aspx
<script lang=”javascript” type=”text/javascript”>
var qrStr = window.location.search;
var spQrStr = qrStr.substring(1);
var arrQrStr = new Array();
// splits each of pair
var arr = spQrStr.split(‘&’);
for (var i=0;i<arr.length;i++){
// splits each of field-value pair
var index = arr[i].indexOf(‘=’);
var key = arr[i].substring(0,index);
var val = arr[i].substring(index+1);
// saves each of field-value pair in an array variable
arrQrStr[key] = val;
}
document.write(“<h1>Search parameter: “+arrQrStr["q"]+”. Extra parameter: “+arrQrStr["type"]+”</h1>”);
С помощью jQuery:
$.ajax({
url: 'url/Action',
type: 'GET',
data: $('#formId').serialize()
})
с помощью:
Вы могли бы сделать это:
<input type="submit" value="get">
С (так как вы пометили этот jQuery):
jQuery('input[type=submit]').click(function () { this.form.method = 'GET'; });
… Но формы, которые могут перейти к данным с возможностью закладок или могут внести существенные изменения, звучат так, как будто они вводят пользователя в заблуждение (и я не могу думать ни о какой другой причине, чтобы переключаться с публикации на лету в элементах управления конечного пользователя),
Если вы всегда хотите получать данные, вам следует изменить источник, отправленный в браузер, вместо того, чтобы вертеть DOM на лету с помощью JS.
Вы могли бы просто <form method="GET">
вместо <form method="POST">
, Не требуется Javascript (если вы не хотите обновлять страницу).
На самом деле, вам просто нужно изменить method
атрибут вашего <form>
тег в вашем HTML.
Если у вас нет прямого контроля над разметкой, которую генерирует ваш компонент.NET, вы всегда можете манипулировать <form>
пометить и установить атрибут с JavaScript, когда страница загружается.
Или вы можете привязать событие click к кнопке отправки формы и отменить событие (вернув false
например), и сделать GET
сам.