我的客户端希望通过查询字符串传递值,但他们不希望查询字符串显示在浏览器的地址栏中。传递的值用于跟踪目的。我知道点击href链接后不会发生回发。
有没有什么方法可以从查询字符串中获取值而不在浏览器的地址栏中显示它?我想这可能是不可能的,但我可能错了;我希望看看是否有人有任何答案。
答案 0 :(得分:0)
不,如果它在查询字符串中,最终用户将通过地址栏看到它。这是HTTP GET请求的标准行为。
如果您使用的是WebForms,请查看LinkButton
控件。这将执行实际的回发,这是一个POST操作。您将在.NET代码隐藏中响应LinkButton的OnClick
事件,并且您已经准备好了。
答案 1 :(得分:0)
听起来您需要将字符串存储在查询字符串以外的位置。如何使用状态管理,例如,将此值存储在会话中,这样,在用户单击链接后打开的新页面中,您可以使用它。
将其添加到查询字符串:
“http://yoursite.com/yourpage?id=123”
将其存储在会话中:
使用服务器控件(如LinkButton或按钮)将用户重定向到新页面,然后将字符串值保存到会话中。
protected void LinkButton_Click(object sender, EventArgs e)
{
Session["Id"] = 123;
Response.Redirect("yourpage.aspx", false);
}
要从会话中获取字符串值,请使用:
Session["id"].ToString();
要了解有关州管理的更多信息并查看其他选项,请转到here
不同解决方案
在将查询字符串值添加到URL之前对其进行加密,然后对其进行解密。如果您选择此路线,请查看本文以获取有关加密/解密值的详细信息。
答案 2 :(得分:0)
这取决于您要跟踪的内容。如果您试图在用户浏览网站时动态跟踪用户,则最好将小型令牌放入会话中 - 如Ricardo states in his answer。
如果您想跟踪特定链接在您网站上的效果,或者用户关注的链接,那么您需要使用一些JavaScript:
基本上,您需要在onclick
标记上创建一个<a>
事件,该事件会调用您服务器上的服务(或类似服务),以跟踪/记录此次点击发生的事实。
如果此方法返回true
,则控件将返回浏览器,并且将请求原始href。
此示例假定使用jQuery,但其他库将允许您执行类似的操作 - 您可以使用所有本机ASP.NET工具,我只需要使用此代码:
<a href="/someUrl.aspx" onClick="javascript:TrackThis(this);return true;">text</a>
<script type="text/javascript">
function TrackThis(link){
$.ajax({
url: "/WebServices/ClickTracker.asmx/Track",
type: "POST",
dataType: "json",
data: "{\"url\":\"" + link + "\", \"page\":\"" + window.location + "\"}"
contentType: "application/json; charset=utf-8"
});
}
然后,您可以创建一个简单的Web服务,该服务获取您传入的值(在这种情况下是用户单击的链接的值,以及它们当时所在的页面的URL),执行其处理并且不让路。
Google通过搜索结果执行与此类似的操作 - 浏览器状态栏中的网址以及您到达的网址是索引网站中的网址,但在中间您访问Google服务器上的跟踪网页,你点击它,它使用onclick
事件。