我用ajax响应一动作,在后台的ashx里加了DateTime eta = DateTime.Parse(dt.Rows[0][16].ToString()); 这么一句时间转换,前台就抓到500错误了。 但是在vs2005环境下却跑的很好,有点不解,请达人指教!

解决方案 »

  1.   

    DateTime eta = DateTime.Parse(dt.Rows[0][16].ToString());捕获一下异常吧··
      

  2.   


    在vs中调试时没有异常,只是在客户端用ie打开会出错的
      

  3.   

     public void ProcessRequest (HttpContext context) {
            string id = context.Request["shipid"].ToString();
            //context.Response.ContentType = "text/plain";
            //context.Response.Write("Hello World");
            DBManager dbm = new DBManager();
            dbm.InitDB();
            string transdata = "[";
            string querymessage = "SELECT ps.Shipid,ps.PIID,ps.Invoiceid,ps.Tradeterm,ps.Termcountry,ps.Termport," +
                    "ps.Forwarder,ps.Shipmethod,ps.Fromcountry,ps.Fromport,ps.Destinationcountry,ps.Destinationport," +
                    "ps.Vesselname,convert(varchar(10),ps.Closingday,103) as cld,convert(varchar(10),ps.ETD,103) as eTD,ETDWeek,convert(varchar(10),ps.ETA,103) as eta,ps.ETAWeek,convert(varchar(10),ps.ASD,103) as ASD,ps.CBM,ps.GP20,ps.GP40,ps.HQ40," +
                    "ps.preshipgoods,ps.preshipres,ps.preshiphandleby,i.ship,i.side,i.innerctn " + Environment.NewLine +
                    "FROM Partial_Shipment as ps LEFT OUTER JOIN DEL_INVOICE as i on ps.Invoiceid=i.Invoiceid"+
                    " WHERE ps.shipid=" + id ;
            DataTable dt = dbm.Query(querymessage);
            if (dt.Rows.Count == 0)
            {
                transdata = "[]";
            }
            else
            {
                for (int i = 0; i < dt.Columns.Count-1; i++)
                {
                    if (dt.Rows[0][i].ToString() == "")
                    {
                        transdata += "'',";
                    }
                    else
                    {
                        transdata += "'" + dt.Rows[0][i].ToString().Replace("\r\n","").Replace("'","") + "',";
                    }
                }
                transdata += "'" + dt.Rows[0][dt.Columns.Count - 1].ToString() + "']";
                DateTime eta = DateTime.Parse(dt.Rows[0][16].ToString());
               // DateTime etd = DateTime.Parse(dt.Rows[0][14].ToString());
               // DateTime asd = DateTime.Now.AddDays(10);
               // if(dt.Rows[0][18].ToString() != "")
               // asd = DateTime.Parse(dt.Rows[0][18].ToString());
               // TimeSpan TS = eta - DateTime.Now;
               // int EndT = TS.Days;
               // TimeSpan TS1 = asd - DateTime.Now;
               // int a = TS1.Days;
               // string stuts = "Pendding";
               //if (a < 0 && EndT > 0) stuts = "Shipped";
               // if (a < 0 && EndT < 0) stuts = "Arrived";
                
                //transdata += "'" + EndT.ToString() + "','" + stuts + "']";
            }
            context.Response.Write(transdata);
        }
      

  4.   

    加try catch
    是否是日期格式,删除看效果
      

  5.   

    本地和服务器数据库是不是有不一样的地方?dt.Rows[0][16].ToString()判断为空; 
      

  6.   

    我觉得楼主就应该是输出的JSON格式不对
      

  7.   

    直接抓到500 应该都没正确返回吧,跟json格式没关系吧.关键是vs下调试都没问题
      

  8.   


    谢谢,抓出错误了。 dt.Rows[0][16].ToString()格式无效格式。 
    奇怪的是,我是以自己电脑为服务器的, vs调试也在自己电脑上做的,为啥在 vs里能调试通过,而直接通过浏览器去看却抓出时间格式无效