我有以下内容:
<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=">>"/>
</form>
基本上我的查询字符串应该是类似DC = 1&amp; Type = type1我遇到的问题是当我点击&gt;&gt; html上方的按钮通过更改&amp; amp;到%26和=到%3D
如何使值保持在上面的代码中?
答案 0 :(得分:1)
表单旨在提交键/值对数据,其中键是控件的name
,值为value
。他们不会将任意字符串混合在一起。
设计服务器端程序,以期望以表单设计使用的格式输入。
答案 1 :(得分:1)
是的,这是预期的行为,HTTP GET以这种方式工作,值被编码为与键不同。在GET中,浏览器附加由'&amp;'分隔的键=值对并从'?'开始;你不应该自己在网址中指定它们。
我认为你应该以这种方式改变你的代码,也许这就是你想得到的:
<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;
}
答案 2 :(得分:0)
......这是正确的。 Request-Parameters [get]应该被编码。 当您收到请求时,您的服务器应该解码它们[apache / php]或者我不知道ASP但是在php中它会使用一个名为urldecode()的函数...
答案 3 :(得分:0)
因此,当您设置表单上的单个项目时,您要做的是将两个不同的查询字符串设置为两个不同的值。虽然您尝试的解决方案是一个很好的想法,但显然浏览器会主动阻止您使用该方法(出于安全原因),这是正确的。我看到两种适合你的解决方案。
使用表单只发送一个查询字符串(即DC),并在服务器端确定“类型”的值应该是什么。如果将两个值都作为查询字符串(例如,您重新使用仅查看这些查询字符串的Control)确实非常重要,那么请在服务器端使用Server.Transfer添加其他查询字符串。
在表单上提供两种类型的输入。一个是您在那里的选择框,另一个是隐藏的选择框,隐藏的输入字段或其他适合您的选择框。将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=">>"/>
</form>
答案 4 :(得分:0)
答案 5 :(得分:0)
您应该使用:
HttpUtility.UrlDecode();
转换网址中的转义字符
答案 6 :(得分:-1)
您可以从<form>
中删除方法和操作。而是扩展JavaScript / VBScript以获取所选选项的值并使用url根进行连接。
你不需要弄乱url解码,%..应该可以正常工作。