Преобразовать форму сообщения в строку запроса

Я работаю в 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()
})

с помощью:

JQuery AJAX

Сериализация jQuery

Вы могли бы сделать это:

<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 сам.

Другие вопросы по тегам