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

是的,这是预期的行为,HTTP GET 以这种方式工作,值被编码为与键不同。在 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. 使用表单只发送一个查询字符串(即 DC)并在服务器端确定“类型”的值应该是什么。如果将两个值都作为查询字符串非常非常重要(例如,您正在重新使用仅查看这些查询字符串的控件),则在服务器端使用 Server.Transfer 添加其他查询字符串.

  2. 在表单上提供两种类型的输入。一个是您在那里的选择框,另一个是隐藏的选择框、隐藏的输入字段或其他适合您的东西。将 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

...这是正确的。请求参数 [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 回答