为实现自己主动弹出通过用户输入关键词相关的搜索结果,在这里,我举两个解决方案,对于两个不同的方案。

常用的方法是建立一个用户数据库中查找关系表。然后输入用户搜索框keyword异步调用数据表中的相关数据。显示在一个隐藏div中。

另外一种方式也就是我如今着重讨论的方式。适用于单个用户,基于此用户以往的搜索数据来实现搜索提示功能。技术关键是记录下用户的以往搜索数据,写入cookie,然后页面从用户本机cookie调用数据。

ok,以下进入正题。本文主要讲实现步骤,代码可依据自己实际须要更改。

一,怎样写入cookie?

为了写入Cookie。他的步骤主要有三步,详细例如以下:

首先就要创建一个HttpCookie对象,通过这个对象来构造一个Cookie,这个对象的名称就是以后产生的Cookie名称。

详细例如以下代码:

HttpCookie cookie = new HttpCookie("MyOnlyCookieName");//定义自己标示性的Cookie名称

然后对创建的HttpCookie对象的" Value" 属性分配一个字符串值," Value" 的值就是后来产生的Cookie的值。

如:MyNameCookie.Value = "用户给Cookie赋值" ; 假设你想写入的Cookie数值不是一个简单的字符串,而是一个复杂的数据类型,我们知道这些数据类型是不能直接存贮到Cookie中的。由于Cookie中仅仅能存贮字符串。但你能够通过一个变通的方法,就是把这个复杂的数据类型转换成多个字符串,然后把这多个字符串同一时候赋值给产生的Cookie值,这样Cookie中的内容就丰富了,以后利用Cookie完毕的功能也强大了。

这时你可能就会明确为什么当你浏览Webserver,Webserver会知道你什么时候以前浏览过,而且以前待过多长时间等信息了。由于这些信息已经存储到你第一次浏览页面时,Webserver产生的Cookie中去了。下列代码是把多个字符串存储到Cookie的样例:

cookie [ " 姓名" ] = " 王天";
cookie [ " 性别" ] = " 男";
cookie [ " 年龄" ] = " 26";

Cookie有暂时的。也有永远的。永久 Cookie 以文件形式存储在计算机上,关闭 Internet Explorer 时仍然保留在计算机上。

再次訪问该站点时,创建该 Cookie 的站点能够读取。在详细的编程时候,是在写入此Cookie的时候。设定Cookie的生命周期,详细例如以下代码:

DateTime dtNow = DateTime . Now ;

TimeSpan tsMinute = new TimeSpan ( 1 , 0 , 0 , 0 ) ;

cookie . Expires = dtNow + tsMinute ;

以上代码是设定产生的Cookie的生命期为" 一天" ,你能够通过改动" TimeSpan" 属性来设定产生Cookie的详细生命期。

ok,综合起来。带cookie的操作代码例如以下

public partial class cookieTest: System.Web.UI.Page
{
string CookieKye = "jinWebCookies";
protected void Page_Load(object sender, EventArgs e)
{ }
protected void WriteCookie()
{
CookieKye = readCookie();
HttpCookie cookie = new HttpCookie(CookieKye);//定义cookie对象以及名为Info的项
DateTime dt = DateTime.Now;//定义时间对象
TimeSpan ts = new TimeSpan(30, 0, 0, 0);//cookie有效作用时间.
cookie.Expires = dt.Add(ts);//加入作用时间
string searchKey=searchId.Text.Trim();
cookie.Values.Add(searchKey, searchKey);//添加属性
Response.AppendCookie(cookie);//确定写入cookie中 }
private string readCookie()
{ int i=0;
while (i >= 0)
{
if (Request.Cookies[CookieKye+i] == null)
{
return CookieKye + i;
}
i++;
}
return "";
}
protected void demoCookie()
{
//读取cookie
if (Request.Cookies[CookieKye] != null)
{
string temp = Convert.ToString(Request.Cookies["Info"].Value);
if (temp == "")
{
Response.Write("空");
}
else
Response.Write(temp);
}
else
{
Response.Write("error");
}
//改动cookie
Response.Cookies["Info"]["user"] = "2";
Response.Cookies["Info"].Expires = DateTime.Now.AddDays(1);
//删除cookie下的属性
HttpCookie acookie = Request.Cookies["Info"];
acookie.Values.Remove("userid");
acookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(acookie);
//删除全部cookie,就是设置过期时间为如今即可了
int limit = Request.Cookies.Count - 1;
for (int i = 0; i < limit; i++)
{
acookie = Request.Cookies[i];
acookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(acookie);
}
}
protected void Unnamed1_Click(object sender, EventArgs e)
{
WriteCookie();
}

二,OK。如今是页面端的代码

对于页面端,此处我通过js来读取cookie数据,然后把数据写入提示框

首先,是javascript处代码

<script>
var setSearchFlag;
function showSearch(obj) {
clearSearchFlag();
var w3c = (document.getElementById) ? true : false; //w3c 标准
var ns6 = (w3c && (navigator.appName == "Netscape")) ? true : false; //Netscape浏览器 标准的W3C
var left, top;
if (!ns6) {//推断IE
var nLt = 0;
var nTp = 0;
var offsetParent = obj; while (offsetParent != null && offsetParent != document.body) {
nLt += offsetParent.offsetLeft;
nTp += offsetParent.offsetTop;
offsetParent = offsetParent.offsetParent;
}
left = nLt;
top = nTp + obj.offsetHeight;
} else {//标准w3c
left = obj.offsetLeft - 5;
top = obj.offsetTop + obj.offsetHeight;
} $('#showInfo').css('display', 'block');
$('#showInfo').css('top', top); var seach = getCookie("jinWebCookies");
$('#showInfo').html(seach); }
function hideSearch(obj) {
setSearchFlag = setTimeout(function () { $('#showInfo').css('display', 'none'); }, 100);
} function clearSearchFlag() {
window.clearTimeout(setSearchFlag); //取消由setTimeout()方法设置的定时器。
}
function getCookie(cookieName) {//读取cookie
var cookieContent = '';
var cookieAry = document.cookie.split("; "); //得到Cookie数组
for (var i = 0; i < cookieAry.length; i++) {
//var cookieName = cookieName + i;
var temp = cookieAry[i].split("=");
if (temp[0] == cookieName) {
cookieContent = unescape(temp[1]);
}
}
return cookieContent;
}
//写入Cookie
//document.cookie = "cookieName=" + escape("要写入的内容"); //cookieName为要写入的Cookie的名称 </script>

ok,然后是插入一个搜索框,然后触发js

        <form id="form1" runat="server">
<asp:TextBox runat="server" id="searchId" onkeyup="showSearch(this)" onblur="hideSearch(this)"/>
<asp:Button runat="server" Text="btn_search AddCookie"
onclick="Unnamed1_Click" />
</form>
<div style="width:150px;height:300px;border:1px solid #817F82;display:none;position: absolute;" id="showInfo"></div>

以上就是本人对此处cookie保存用户搜索数据。然后在用户输入搜索数据弹出提示做出的一些实验。

整体方法就是这样。有有兴趣的同学可以讨论,我们希望有一个更有效的实现。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

讨论asp.net通过机器cookie仿百度(google)实现搜索input搜索提示弹出框自己主动的更多相关文章

  1. 使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和键盘对弹出框里候选词的操作【附源码】

    项目中常常用到搜索,特别是导航类的网站.自己做关键字搜索不太现实,直接调用百度的是最好的选择.使用jquery.ajax的jsonp方法可以异域调用到百度的js并拿到返回值,当然$.getScript ...

  2. 仿腾讯微博的一个弹出框 v0.1 beta

    仿腾讯微博的一个弹出框 v0.1 beta   代码写的不太好,新手请大家海涵,只为博君一笑,勿放在心上. 写在这里留作纪念,也许以后用的到. 效果 CSS .prompt{ position: ab ...

  3. 在ASP.NET MVC4中实现同页面增删改查,无弹出框02,增删改查界面设计

    在上一篇"在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建"中,已经搭建好了Repository层,本篇就剩下增删改查的界面了......今 ...

  4. 在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建

    通常,在同一个页面上实现增删改查,会通过弹出框实现异步的添加和修改,这很好.但有些时候,是不希望在页面上弹出框的,我们可能会想到Knockoutjs,它能以MVVM模式实现同一个页面上的增删改查,再辅 ...

  5. vue在element-ui的dialog弹出框中加入百度地图

    参考:https://blog.csdn.net/u012724595/article/details/82703579 <!-- gps弹窗 --> <el-dialog v-di ...

  6. 浅谈asp.net通过本机cookie仿百度(google)实现搜索input框自己主动弹出搜索提示

    对于通过用户输入关键词实现自己主动弹出相关搜索结果,这里本人给两种解决方式,用于两种不同的情形. 常见方法是在数据库里建一个用户搜索关系表,然后通过用户搜索框输入的keyword异步调用数据表中的相关 ...

  7. ASP.NET中的几种弹出框提示基本实现方法

    我们在.NET程序的开发过程中,常常需要和用户进行信息交互,比如执行某项操作是否成功,“确定”还是“取消”,以及选择“确定”或“取消”后是否需要跳转到某个页面等,下面是本人对常用对话框使用的小结,希望 ...

  8. ASP.NET—013:实现带控件的弹出层(弹出框)

    http://blog.csdn.net/yysyangyangyangshan/article/details/38458169 在页面中用到弹出新页面的情况比较多的,一般来说都是使用JS方法sho ...

  9. ASP.NET中的几种弹出框提示基本方法

    NET程序的开发过程中,常常需要和用户进行信息交互,对话框的出现将解决了这些问题,下面是本人对常用对话框使用的小结,希望对大家有所帮助 我们在.NET程序的开发过程中,常常需要和用户进行信息交互,比如 ...

随机推荐

  1. Hadoop--序列化

    序列化: 对象的序列化用于将一个对象编码成字节流,以及从字节流中重新构建对象. 将一个对象编码成一个字节流称为序列化该对象. 序列化三种主要的用途: 1.作为一种持久化格式. 2.作为一种通信的数据格 ...

  2. Android应用开发学习笔记之ContentProvider

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz ContentProvider用于为其它应用程序提供共享数据,它为不同应用程序间共享数据提供了统一的操作接口. 一. ...

  3. 从源代码角度分析ViewStub 疑问与原理

    一.提出疑问     ViewStub比較简单.之前文章都提及到<Android 性能优化 三 布局优化ViewStub标签的使用>.可是在使用过程中有一个疑惑,究竟是ViewStub上设 ...

  4. 第十七篇:实例分析(1)--初探WDDM驱动学习笔记(八)

    第四篇(VidPN)中提到过MIRROR驱动. 在进入本篇的实际内容前, 带着好奇心, 想请教CSDN中的显卡驱动方面的大虾, 怎样才干把这个驱动玩起来, 这个驱动的作用是什么,等等, 敬请不吝赐教. ...

  5. XML SelectSingleNode的使用 根据节点属性获取该节点

    unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Form ...

  6. Linux多线程服务端编程:使用muduo C++网络库

    内容推荐本 书主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread.这 ...

  7. Zxing中文乱码解决方法

    Zxing中文乱码解决方法总结 尝试过非常多方法  最后发现此方法解决的乱码最多....... 在百度搜索二维码图片 经过前2页的測试  除开一张图之外  其余都能扫描出结果 假设大家有更好的解决方法 ...

  8. [Windows Phone]AnimationHelper管理分散的Storyboard

    问题描述: 在Windows Phone开发时候,可能存在这样的问题: 某一个控件需要一个特定的展现(这里假定是一个特定动画),那么我们会这么解决这个问题呢? 打开Blend,根据需求需求给控件添加动 ...

  9. C#向并口设备发送指令以获取并口设备的状态

    using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Text; usi ...

  10. 【Cocos2d-X开发学习笔记】第01期:PC开发环境的详细搭建

    本文使用的是cocos2d-x-2.1.4版本 ,截至目前为止是最新稳定版 所谓的开发环境就是制作游戏的地方,打个比方读者就会十分清楚了.比如提到做饭,人们都会想到厨房.这是 因为厨房有炉灶.烟机.水 ...