• url中出现井号("#")的问题


    今天在asp.net mvc网站项目的前台页面里写一段js代码时,想要跳转到某个url,例如

    location.href="xxxx?"+"id="+id+"&keyword="+keyword;

    其中id和keyword都是后台Controller的Action方法需要的参数,从html的input文本框的值,奇怪的是当在keyword文本框输入"#1作品"时,发现传到后台时keyword的值为null,前端明明传的是"#1作品",怎么到了后台成了null?

    另外一类似的方法中,用JQuery的ajax发送post请求时,也向后台发送了参数id="#1作品",后台却能正确接收到"#1作品"。

    上网查了才知道,当url中出现"#"号时,"#"及其后面的字符串都会被忽略,不会被发送到服务器,因为浏览器将一个url视为一个html页面,而"#str"表示该页面的id为str的块(section),如<div id="str">......</div>,请求被发送到服务器,然后服务器把页面发送到浏览器,并被浏览器解析之后,浏览器在将该页面自动滚动到id为str的section。

    因为请求的是页面,所以浏览器不会把"#"后面的当成参数发送到服务器,因此服务器收到的该参数值为null.

    但是服务器又需要这个参数,怎么办呢,答案是对参数进行转义就行了,利用js的escape()函数即可转义:

    location.href="xxxx?"+"id="+id+"&keyword="+escape(keyword);
    

    这样"#"会被转义成"%23",而后台的cs代码会自动将其恢复成转义之前的"#"。

     而用JQuery发送post类型的ajax请求时,因为参数被封装进数据体,并没有放在url中,因此不需要转义也会原原本本地发送给服务器,转义之后反而得不到"#"了,而是变成了"%23"

  • 相关阅读:
    刻舟求剑,
    录制时间是不准确的,
    HIV T2
    DNA RNA
    洛谷 P1428 小鱼比可爱
    Codevs 1081 线段树练习2
    Codevs 1080 线段树联系
    Tarjan算法
    Codevs 2611 观光旅游
    洛谷 1865 A%B问题
  • 原文地址:https://www.cnblogs.com/aaronhoo/p/5803357.html
Copyright © 2020-2023  润新知