近期开发项目中遇到的问题,并总结

1.jquery1.3以后的版本,如果要获取JSON值,json格式必须是标准格式的:如:{"key":"value","key2":"value2"}
2.mysql存储过程参数名称与列明不能相同,如果相同,查询或者更新的数据会有错误
3.在引用jquery.mcdropdown.js作下拉列表的时候,如果提示“a is undefined”说明下拉列表中没有值或者下拉列表中的内容不正确;
4.在IE6的JS不认识undefined,所以为了兼容,最好不要再JS中添加判断是否为undefined。
5.在IE6下要保证不能有任何的JS错误,报错JS函数不存在的错误,否则其他的函数可能就不能正常执行。
6.在用代码生成器自动生成的model中,存在int?这样的数据类型。在用反射方法TableToList转换时候会出错,所以需要将model中的所有类型后代?的都去掉。
7.DataTime类型的数据得到的DbType总是Int32,修改了HtDbFactory中的CreateParameter方法
public DbParameter CreateParameter(string key, object value)
        {
            DbParameter p = CreateParameter();
            p.ParameterName = key;
           // p.Value = value;
            //valus是数据类型,他的值应该赋给p.DbType,否则得到的p.DbType为int32.(author:ljf)
           p.DbType =(DbType)value;

            return p;
        }
8.调用弹出层页面的函数,弹出两个层,其中一个是Null。
解决方案:
一.frcn.js,main.js相关的内容要注释掉
二,如果1还不行,看是不是有两个页面调用了同一个名字的函数。个人用户和平台用户密码修改的功能,在他们各自的页面都写了SetPwdInit函数,结果就出现两个,这种情况修改其中一个的函数名字。
9.在js中用split,substring,lastIndexOf等处理字符串的函数时,如果提示这些函数报错,说明提交的字符串有问题,需要将要处理的字符串加上toString(),这样就能正常执行了。
10.vs.net可以调试JS,在要调试的js函数中添加debugger;然后在vs.net中调试,运行到这个词时会停止。FF浏览器中有firedebug,可以在这里面调试。
11.查询用户列表时候,如果其他一切都正常,但是用分页查询时报错,这就说明分页存储过程sp_ProPageResult的字段sCondition  字段不够长,需要调整字段的大小。
12.位运算。位运算通常用在权限的加减。比如一条消息,可以是接收方已读(1),接受方已删(2),当他们需要组合时,需要对权限树按位或(|)运算,1|2=3;在接收方要查询自己的消息时,这时候就要排除已经删除的消息,这就需要对权限数进行按位与(&)运算。当3&2==2,得到的结果是已经删除的消息!=2就是没有删除的消息。这种方式对权限的组合是很好的方式。
13.从一个网站进入另个网站时,如果直接用window.open('/Flex/Index', '_blank'),这个时候浏览器会阻止弹出窗口,他们认为这是广告。所以要解决这个办法,只有在进入前弹出一个提示框,要用户点击后再进入。MessageConfirm("Confirm", "Are You Confirm To enter Main Page?", "window.open('/Flex/Index', '_blank')");
14.如果页面在异步加载内容时被遮盖住的时候,在执行完异步后,调用top.ifrLoad();
15.对于win2003服务器上未安装.net mvc框架时,要部署mvc项目时,要把本地文件System.Web.Mvc.dll,放入bin文件夹中。
16.mysql编码问题,当在查询时,将日期转换为字符串之后(date_format(datetime, '%Y-%m-%d')),前台显示的数据是一个看不懂的字符串时,这是因为编码有问题,这是就需要转换(Convert(date_format(datetime, '%Y-%m-%d') using utf8) as datetime)
17.htmlStr = '

';弹出页面的iframe需要加ID,id="popFrm"
18.放在linux服务器的应用程序有时候找不到路径,但是放在windows服务器上不会报错,这种错误的原因是URL大小写错误。
19.在linux上我的公共输出JSON方法的方法与放在winodws系统上的输出是不一样的,所以导致前台没有任何的响应。这需要将所有的引用方法去掉,直接用Response.Write方法输出
20.asp.net在linux上的部署的项目,应用服务器是nginx,如果页面中用了服务器端注释“<%-- --%>”,在客户端解析不出来<%解析成<%,这样就起不到注释的作用了。
21.部署在linux上的nginx的项目,不能有多余的代码,无用的代码。不然经常出些问题。DateTime.MinValue.ToString()在两个服务器上的解析是不一样的。因此时间这类的问题会经常出现。特别要注意的是日期,普通的日期格式在windows和linux上显示的格式是不一致的。DateTime.Now在window上显示的是“2011-11-02 07:26:54”,而在linux上显示的是“12:12:23 2010-10-10 am”,这样在查询,增加,修改的时候就会出错,所以这点要特别注意。
22.IE6,IE7下,当在弹出页面上引用jquery.easyui,使用该插件的 $.messager.alert弹出提示对话框,如果一旦执行了对话框,并点击了对话框的“确定”之类的操作按钮后,关闭弹出页面后,原始页面(弹出框页面所在位置的下面的页面)的文本框不能进行编辑。解决办法:在用户执行上述操作后,点击关闭弹出页面时,设置原始页的文本框获得焦点。 
var close = top.close;
      function closed(){
         Cancle();
      }
      top.close  = closed;
      function Cancle() {
         if(top.isIE){
         top.$("#ifrm").contents().find("#txtUsername").focus();
         }
         top.close = close;
         close(true);
      }
23.【linux服务器】,页面包含下面的注释代码,只在IE6下运行,用来设置PNG图片背景透明的;

解析后:

这样就导致页面中其他的JS不能正常运行;所以要去掉注释符;

24.mysql查询的数据在DataSet里面显示System.byte[],原因是两个不同类型的值组合在一起产生的这种问题,例如:查询组合字段
“CASE u.`first_mileage` WHEN 0 THEN '' ELSE CONCAT(u.`first_mileage`,'Km') END  AS first_mileage”。这种情况下会产生这种问题。
解决办法:System.Text.Encoding.Default.GetString((byte[])dr["first_mileage"]);,用这个方法就能得到我们想要的数据;
25:asp.net+oracle+iis运行程序时候报错:System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。
原因:NTFS权限问题,在ORACLE9I时总是遇到

  解决方法:将oracle客户端装到NTFS格式的磁盘上。

  1、以管理员的用户登录;

  2、找到ORACLE_HOME文件夹(我的是C:\Ora10InstantClient),点右键,选属性--安全,在组或用户栏中选“Authenticated Users”,在下面权限列表中把“读取和运行”的权限去掉,再按应用;重新选上“读取和运行”权限,点击应用;选权限框下面的“高级”按钮,确认“Authenticated Users”后面的应用于是“该文件夹、子文件夹及文件”,按确定把权限的更改应用于该文件夹;

  3、重新启动计算机,让权限设置生效(请注意,这一步很重要);

  4、登录后运行asp.net应用,正常取得Oracle数据库的数据。
26.当你使用MySQL concat( )调用构建一个字符串输出时,你必须小心空值,它将你的整个字符串转为空值,象下面这样的代码就很危险:

   select someColumn from someTable into myVar where.
  concat('better hope myVar is not null', myVar);

27.asp.net mono不支持在特定IE下执行的代码注释,如下所示:

解决办法:
<% if (Request.Browser.Browser.Contains("IE") && float.Parse(Request.Browser.Version) < 7) { %>
        
<% } %>
28.两个弹出窗口都是iframe页面,最后弹出的窗口在执行完成后要设置上一个弹出窗口的下拉列表的值,这时获取上一个窗口的下拉列表对象的方法是:$(top.window.frames[1].document).find("#owner")。例如:
 var str = "";
        $(top.window.frames[1].document).find("#owner").append(str);
        $(top.window.frames[1].document).find("#owner").attr("value", data.userid);
29.使用jquery easyui combotree遇到的问题;(原因:服务器对于空的POST认为是攻击,所以要用GET方式请求)
    1.请求不到内容,方法如下:
      $('#selRole').combotree({url: '/RoleManagement/GetRoleListJson?ID=' + Id,valueField: 'id',textField: 'text'});
      在window2003,iis上用此方法能正常请求到输入,但是放到linux,jws服务器上却请求不到数据,但是在浏览器中直接输入请求地址:/RoleManagement/GetRoleListJson能看到数据;
      解决办法:改变请求方式,默认是POST,改为GET,$('#selRole').combotree({url: '/RoleManagement/GetRoleListJson?ID=' + Id,method:'get',valueField: 'id',textField: 'text'});
    2.reload方法在IE8下请求的数据一直是从缓存中取的,导致有新的数据时无法更新。
      请求地址/RoleManagement/GetRoleListJson,解决办法,在GetRoleListJson方法中在输出Response.Write(sb.ToString())前面加Response.Cache.SetNoStore()清除缓存。
30.easyui datagrid高度自适应问题
在iframe导入的页面里面也采用layout,然后单独把表格放在center区域就可以了


 

 
   

 

31.用easyui时,需要注意的问题:
  a.当使用easyui的datagrid时,出现datagrid显示不全,这时候需要把datagrid放在用easyui布局的页面(body中加layout);
  b.当使用dialog弹出窗口时,修改完内容后保存弹出提示框(Messager),要在Messager的函数的callback函数中调用关闭弹出窗口的方法,不让执行多次会报JS没有权限或者拒绝访问的错误。

你可能感兴趣的:(.net,WEB页面设计,数据库)