html转义字符

时间:2012-07-05 14:52:42

标签: c# asp.net html query-string

我有以下内容:

<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&amp; Type = type1我遇到的问题是当我点击&gt;&gt; html上方的按钮通过更改&amp; amp;到%26和=到%3D

如何使值保持在上面的代码中?

7 个答案:

答案 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)

因此,当您设置表单上的单个项目时,您要做的是将两个不同的查询字符串设置为两个不同的值。虽然您尝试的解决方案是一个很好的想法,但显然浏览器会主动阻止您使用该方法(出于安全原因),这是正确的。我看到两种适合你的解决方案。

  1. 使用表单只发送一个查询字符串(即DC),并在服务器端确定“类型”的值应该是什么。如果将两个值都作为查询字符串(例如,您重新使用仅查看这些查询字符串的Control)确实非常重要,那么请在服务器端使用Server.Transfer添加其他查询字符串。

  2. 在表单上提供两种类型的输入。一个是您在那里的选择框,另一个是隐藏的选择框,隐藏的输入字段或其他适合您的选择框。将Javascript添加到页面,以便在可见选择框中更改选择时将隐藏字段设置为正确的值,然后在提交表单时,两个输入都只提交一个查询字符串,因为浏览器旨在支持

  3. 这是选择#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>
    

答案 4 :(得分:0)

尝试使用:

HttpUtility.UrlDecode()

Further reading

答案 5 :(得分:0)

您应该使用:

HttpUtility.UrlDecode();

转换网址中的转义字符

答案 6 :(得分:-1)

您可以从<form>中删除方法和操作。而是扩展JavaScript / VBScript以获取所选选项的值并使用url根进行连接。

你不需要弄乱url解码,%..应该可以正常工作。