1

私は次のものを持っています:

<form name="input" method="get" action="http://site:8083/Default.aspx?DC=" target="foo" onSubmit="window.open('', 'foo', 'width=1100 height=500,status=no,resizable=yes,scrollbars=yes')">
<select name="DC">
<option value="1&Type=type1">1</option>
<option value="2&Type=type2">2</option>
<option value="3&Type=type3">3</option>
<option value="4&Type=type4">4</option>
<option value="5&Type=type5">5</option>
<option value="6&Type=type6">6</option>
<option value="7&Type=type7">7</option>
</select>
<input type="submit" value=">>"/>&nbsp;&nbsp;
</form>

基本的に、クエリ文字列はDC = 1&Type = type1のようなものである必要があります。問題は、htmlの上にある>>ボタンをクリックすると、&を%26に、=を%3Dに変更して攪拌を台無しにすることです。

上記のコードにある値を維持するにはどうすればよいですか?

4

7 に答える 7

1

nameフォームは、キーがコントロールのであり、値がであるデータのキー/値のペアを送信するように設計されていvalueます。それらは任意の文字列を一緒にマッシュアップしません。

フォームが使用するように設計された形式での入力を期待するようにサーバー側プログラムを設計します。

于 2012-07-05T14:55:40.003 に答える
1

はい、それは予想される動作です。HTTPGETはこのように機能し、値はキーとの違いにエンコードされます。GETでは、ブラウザは「&」で区切られ、「?」で始まるkey=valueペアを追加します。URLで自分で指定しないでください。

私はあなたがこのようにあなたのコードを変えるべきだと思います、多分それはあなたが手に入れたいものです:

<form name="input" method="get" action="http://site:8083/Default.aspx" target="foo" onSubmit="updateType()">
<select name="DC">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <!-- etc... -->
</select>
<input type="hidden" name="Type"/>
<input type="submit" value=">>"/>
</form>

そしてJavascriptで...:

function updateType(){
    // set up 'Type'
    document.forms[0].Type.value = 'Type' + document.forms[0].DC.value;
    // open popup
    window.open('', 'foo', 'width=1100 height=500,status=no,resizable=yes,scrollbars=yes')
    return true;
}
于 2012-07-05T15:29:31.063 に答える
0

つまり、フォーム上の1つのアイテムが設定されているときに、2つの異なるクエリ文字列を2つの異なる値に設定しようとしているのです。あなたが試みた解決策は素晴らしいアイデアですが、明らかにブラウザはあなたがその方法を使用することを積極的に妨げています(セキュリティ上の理由から)そして当然のことながらそうです。私はあなたのためにうまくいく2つの解決策を見ます。

  1. フォームを使用して1つのクエリ文字列(つまりDC)のみを送信し、サーバー側で「Type」の値を決定します。両方の値をクエリ文字列として使用することが本当に非常に重要な場合(たとえば、これらのクエリ文字列のみを参照するコントロールを再利用している場合)、サーバー側でServer.Transferを使用してクエリ文字列を追加します。 。

  2. フォームに2種類の入力を入力します。1つはそこにある選択ボックスであり、もう1つは非表示の選択ボックス、非表示の入力フィールド、またはその他の適切なものです。表示されている選択ボックスで選択が変更されたときに非表示フィールドを正しい値に設定し、フォームが送信されると、ブラウザがサポートするように設計されているため、両方の入力がそれぞれ1つのクエリ文字列のみを送信するようにJavascriptをページに追加します。

選択肢2の実装は次のとおりです。

<script type="text/javascript">
var DCMapping = new Array();
DCMapping["1"] = "type1";
DCMapping["2"] = "type2";
DCMapping["3"] = "type3";
DCMapping["4"] = "type4";
DCMapping["5"] = "type5";
DCMapping["6"] = "type6";
DCMapping["7"] = "type7";
function selectionChanged(selectBox)
{
    alert(DCMapping[selectBox.value]);
    document.getElementById('hidType').value = DCMapping[selectBox.value];
}
</script>
<form name="input" method="get" action="http://site:8083/Default.aspx" target="foo" 
    onSubmit="window.open('', 'foo', 'width=1100 height=500,status=no,resizable=yes,scrollbars=yes')">
    <select name="DC" onchange="selectionChanged(this)">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
    </select>
    <input type="hidden" name="Type" id="hidType" value="1" />
    <input type="submit" value=">>"/>&nbsp;&nbsp;
</form>
于 2012-07-05T15:14:28.687 に答える
0

使用してみてください:

HttpUtility.UrlDecode()

参考文献

于 2012-07-05T15:14:38.183 に答える
0

...そしてこれは正しいです。Request-Parameters[get]をエンコードする必要があります。リクエストを受け取ったら、サーバーはそれらをデコードする必要があります[apache / php]または私はASPを知りませんが、phpではurldecode()と呼ばれる関数を提供します...

于 2012-07-05T14:59:39.540 に答える
0

次を使用する必要があります。

HttpUtility.UrlDecode();

URLのエスケープ文字を変換するには

于 2012-07-31T10:54:01.027 に答える
-1

メソッドとアクションをから削除できます<form>。代わりに、JavaScript / VBScriptを拡張して、選択したオプションの値を取得し、URLルートで連結します。

URLデコードをいじる必要はありません。%..はそのままで正常に動作するはずです。

于 2012-07-05T15:04:24.213 に答える