2012-02-27 17 views
0

私はASPDotNetStorefrontのXMLパッケージ(主にirrelivant)で作業しています。基本的に私はフィールドの束とフォームを提出するボタンを持つフォームを持っています。私は、実際にボタンがフィールドの値をクエリ文字列に変換し、POSTの代わりにGETを実行するようにしたいと思います。フォームを文字列に変換する

私は、JavaScript、おそらくjQueryでこのようなことをすることができると思いますが、どうやってそれを行うのかは分かりません。理想的には、私が呼び出すことができる単純な機能が欲しいです。

私はASP.Netを使用していることに注意してください。フィールドの実際の値を、状態情報ではなくクエリ文字列に変換したいだけです。これは検索フォーム用です。 jQueryを使って

+3

のためにしたシンプルなJavascriptの、またはなぜあなたがしたいですかこれを行う? –

+0

このページがASP.Netソリューションでホストされているため、フォームに「GET」メソッドを変換するだけのソリューションはありませんでした。したがって、POSTにはURLに収まらないVIEWSTATEやその他のものがあります。私はそれを必要としません。私はこれがオプションだったことを知らなかったので、私は後でポケットに入れておきます。 – cjbarth

答えて

1
Response.Redirect("Webform2.aspx?Name=" + 
this.txtName.Text + "&LastName=" + 
this.txtLastName.Text); 

WebForm2.aspxに、あなたがページ間でデータを送信するためにAJAXを使用することができますjqueryのために、この

for (int i =0;i < Request.QueryString.Count;i++) 
{ 
Response.Write(Request.QueryString[i]); 
} 

のように行うことができます。ここでは、サンプルコード は、これは私が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のない例を使用してのUsing jQuery for AJAX in ASP.NET : codeproject 例を発見した最高の記事です。あなただけの `メソッド=「GET」`属性を持つ代わりに、GETを使用してフォームを変更することはできませんクエリ文字列

<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>”); 
+0

もっと効率的なものを手にして、私はあなたがここにあるのと同様のパターンを使用してこれを手でコーディングするつもりです。あなたが提案したことは私にとってはうまくいかない。 'onclick =" window.location.href = 'searchadv.aspx?SearchTerm =' + SearchTerm.value; return(false); "' – cjbarth

+0

素晴らしいです。私はあなたがAJAX.Simple Javascript with Query Stringを持たない例のために持っていたことをほぼ正確に使ってしまった。私は実際にそれを含める前に各パラメータの値がデフォルトと異なるかどうかをチェックするルーチンを作成しましたが、ここで示したことはまさに私が必要としていたものです。私はあなたが構築したルーチンも好きです。 – cjbarth

0

は本当に、あなたは自分のHTMLでのご<form>タグのmethod属性を変更する必要があります。

.NETコンポーネントが生成するマークアップを直接制御できない場合は、<form>タグを操作して、ページが読み込まれるときにJavaScriptで属性を設定できます。

または、フォームの送信ボタンにクリックイベントをバインドし、イベントをキャンセルすることができます(たとえばfalseを返すことによって)GETを自分で実行します。

0

<form method="POST">の代わりに<form method="GET">とすることができます。 Javascriptは必要ありません(ページを更新したくない場合を除きます)。 (あなたはこのjQueryのをタグ付けするので)で

<input type="submit" value="get"> 

を::

jQuery('input[type=submit]').click(function() { this.form.method = 'GET'; }); 

を...しかしブックマーク可能なデータやかもしれないメイクに行くかもしれないことを形成

1

あなたはこれを行うことができますユーザーに混乱を招くような大きな変化があります(エンドユーザーのコントロールでは、ポストからオンザフライで切り替える他の理由は考えられません)。

いつもデータを取得したい場合は、JSを使ってオンザフライでDOMをひっくり返すのではなく、ブラウザに送信されたソースを変更する必要があります。

+0

私はこれを試したときにUrl Too Longメッセージを受け取りました。あらゆる種類の__EVENTTARGET情報がURLに含まれていました。 – cjbarth

+0

これがブックマークやその他のナビゲーション要素にどのように影響し、シンプルなjQueryを表示するかについては、+ 1を参照してください。 – cjbarth

+0

@cjbarth - 次に、データを圧縮する方法(ルックアップテーブル、短いキー名、ベース10の代わりにベース16の数字を表すなど)を探したり、必要のないデータを削除したりする必要があります。 – Quentin