linsoo 发表于 2006-12-24 14:49

问一个客户端显示的问题

问一个问题:<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>

linsoo 发表于 2006-12-24 15:06

我通过另外的方法解决了传值进去的问题,但是感觉很不好...<br><br>就是在页面上放一个html的textbox然后设置runat="server",在pageload的时候把blogid的值放进去<br><br>然后通过js代码从这个文本框里取值再传给这个函数就正常了.....<br><br>希望有高人能帮我看看应该怎么弄..<br><br>就是希望这个函数能使用 http://xxxx/xxx.aspx?blogid=5  这里面的这个5<br><br>我用Session死活就是不行....真郁闷<br><br><br>

linsoo 发表于 2006-12-24 15:15

唉,自己找到解决方法了,原来默认情况下ajax不能调用session的...<br><br><div class="item-title">
                                        <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]

编程论坛