问一个客户端显示的问题
问一个问题:<br>我写了这么一段代码<br>[Ajax.AjaxMethod]<br> public string GetBlogCategory()<br> {<br> string s;<br> string t = Session["blogid"].ToString();<br> Blog temp = new Blog(Convert.ToInt32(t));<br> GridView gv = new GridView();<br> DataSet ds = temp.GetBlogCategories();<br> gv.DataSource = ds.Tables[0];<br> gv.DataBind();<br> System.Text.StringBuilder sb = new System.Text.StringBuilder();<br> System.IO.StringWriter sw = new System.IO.StringWriter(sb);<br> System.Web.UI.HtmlTextWriter htw = new HtmlTextWriter(sw);<br> gv.RenderControl(htw);<br> s = sb.ToString();<br> return s;<br> }<br><br>发现无论如何,浏览器里显示的都是null...<br><br>如果把string t = Session["blogid"].ToString();<br>改成:string t = "5";<br>那么客户端就能正常显示了...不知道什么原因?<br><br>我在pageload里面用Response.Write把这个函数的返回值直接输出的话完全正常的,不是null....<br><br>如果我这样写的话客户端能正常显示rsdag<br>[Ajax.AjaxMethod]<br>public string GetBlogCategory()<br>
{ <br>
return "rsdag";<br>
}<br><br>但是如果改成:<br>[Ajax.AjaxMethod]<br>
public string GetBlogCategory()<br>
{ <br>
return Session["blogid"].ToString();<br>
}<br>
就只能显示null了,当然了,这个session值我初始化过的...<br><br><br>有高手能帮帮忙吗??<br>
<h3>Ajax中调用session<br> <br> </h3>
</div>
<p>在ajax<br>方法中往往需要验证用户身份等信息,此时通常需要读写session和cookie。在asp.net的ajax方法中读写session和cookie<br>首先要注意的是ajax方法虽然写在网页中,在ide里自动完成工具也可以直接帮你写出Session[key]或者是Request.Cookie<br>[key],但是这些肯定都不好用,因为ajax方法本身就相当于一个网页,他是通过了asp.net的handler截获一次http请求然后执行的代<br>码。所以我们一定要使用HttpContext.Current来调用session和cookie。</p><p>Cookie:<br>HttpContext.Current.Response.Cookie[key]</p><p>Session:<br>HttpContext.Current.Session[key]</p><p>使用上面的写法后,cookie已经可以读取了,但是发现session还是不行,调试发现居然HttpContext.Current.Session这个对象都是null。经过仔细调查才发现,原来ajax默认是不允许调用session的。<br>我们的代码里的ajax方法前面有一个[Ajax.AjaxMethod()],这个AjaxMethod()里面原来是可以加参数的,根据大家使用的ajax组件的版本不同,参数是不同的,我使用的是ajax.net,居然有13种重载之多。<br>这里面有一个参数类型是Ajax.HttpSessionStateRequirement,这种类型是枚举类,有三种值,分别为:<br>None,Read,ReadWrite<br>顾<br>名思义,就是控制在这个ajax方法中是否可以调用session值得,所以我们只要将原来每个ajax方法中头上的[Ajax.AjaxMethod<br>()]换为[Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)],就可以读取<br>session了。</p>
页:
[1]
