在项目中遇到的一些问题


1.自动根据当前月份 创建 天数 生成checkbox 控件   并根据数据库中的记录自动选中对应的

checkbox

原理: 先算出当月的天数 在遍历生成对应数量的checkbox 控件。生成时比较数据库中是否有该记

录来判断是否选中
具体文件: ui/user/clientmag_kefuworktime.aspx


2. 如何获取嵌套控件中子控件内的多个选项(如 CheckBoxList)  将其存入数据库  例:权限功

能中 一页对应多个按钮

原理:遍历整个控件  找到CheckBoxList 控件后 遍历期内的items  将选中的项的value 放入

arraylist 中,然后将其转换成数组
如:string[] rightid = (string[])al.ToArray(typeof(System.String)); 在将其存入数据库中
具体文件: ui/user/clientmag_setCompetence.aspx

 

3.得到一个记录表后,如何得到符合某个条件的记录

原理:通过 table.select(conditon)[0][field].ToString();

 

4.用枚举绑定 下拉列表框

原理:先创建一个arraylist 再将 enum的值赋给arraylist  再进行绑定

ArrayList list = new ArrayList();
            foreach (int i in Enum.GetValues(typeof(Admintype)))
            {
                ListItem listitem = new ListItem(Enum.GetName(typeof(Admintype), i),

i.ToString());
                list.Add(listitem);
            }
            ddlKefuType.DataSource = list;
            ddlKefuType.DataTextField = "text";
            ddlKefuType.DataValueField = "value";
            ddlKefuType.DataBind();


5.在页面内调用用户控件(id=uc)内的方法 aa()
 uc.aa();

 

6.在 repeater 内 用linkbutton 转向

方法1:<asp:LinkButton ID="bttake"  OnClientClick='<%# GetRedirect2(Eval("Id") as

string) %>' />
方法2: 通过 itemCommand 事件 获取


7.获取上页地址

本页地址:   Request.URL;  
   
上页地址:  
  Request.UrlReferrer  
  Request.ServerViables["http_referer"]  
  Request.RawUrl  
  Request.RawUrl.QueryAndPath  
  System.IO.Path.GetFileName(Request.FilePath.ToString())  


8.在页面中动态中生成 用户控件

control = this.Page.ParseControl(@"<%@ Register Src=""usercontrol/Money.ascx""

TagName=""Money"" TagPrefix=""MyControl"" %>    <MyControl:Money ID='money1'

runat=""server"" />");

 Panel1.Controls.Add(control);


9.非泛型集合类以及对应的泛型集合类

非泛型集合类     泛型集合类
ArrayList        List
HashTable        DIctionary
Queue            Queue
Stack            Stack
SortedList       SortedList

 

10.repeater 中根据不同的数据显示 对应的控件,该控件为权限控件,不能设置控件 visble

方法一: 将控件放置在panel里 设置 panel 的visble


11.类库中无法使用 session request response

HttpContext.Current.request
HttpContext.Current.Session["admintype"]
HttpContext.Current.response


12.模板页中响应控件事件 不在form中处理

方法1:使用 ajax来处理  如checkbox 忙碌状态  当执行几次后数据库数据不更新 此时在url后面

加个随机数参数即可解决

 

13.在 JavaScript中 设置 checkbox 选中时 
document.getElementById('chkIsBusy').checked= 后面为字符串 如果为空 不选 不为空 则选上

 


14. 当值为空时,单元框的边框不显示
在 table 的属性上加上  border-collapse:collapse 即可解决

 

15. javascript  缺少对象错误
当 使用 getElementsByName( name ) 时 

I. 如果此语句在 name 控件之前 则报错 将代码放到此控件之后

II。检查这个页面是否有这个控件

 

16. javascript 传参数问题 
字符串 加''     传数组的话可以将数组转换成 字符串 再在js函数里用 split 分割
 

17.下拉列表的选择项
可以直接设置 ddl.selectvalue='内容' 实现 不用遍历其每一项

18.在 gridview中 显示 统计栏
在绑定代码内 找到 FooterRow  设置其内 cell[] 的值  如要统计 其值可以设为
ds.Tables[0].Compute("SUM(发单数)", null)

20. sql 语句的 连接字符串
SQL语句中当'为常量的时候里面要''才能打印出一个'。
例: set @str='select * from table where s='''+@s+''''

21.通过ShowModalDialog 打开页面,在POSTBACK时,打开新的页面?如何解决?
a、如果你是IE6,你将<base target="_self"/>加入到<head>标签里就可以了。
b、如果你是IE7,你必须将<base target="_self"/>加入到<head>的中间位置。

 

22. 多个页面的session问题

如果在一个页面中保存SESSION变量后 再在菜单中新建窗口或按ctrl+n 打开新窗口、跳转、或者更改地址栏都不会有问题  新开的页面可以获得此session

但如果关掉页面 重新打开则不能获取 

原因:session传递依赖于sessionid,当关掉页面重开一个时相当于重新建立个sessionid 此时就不能获取原session的值了。

 

23.C#中&&运算符和&运算符、|运算符和||运算符之间有什么区别?
&、^   和   |   运算符称为逻辑运算符。    
&&   和   ||   运算符称为条件逻辑运算符。也称为“短路”逻辑运算符。  
   
&&   和   ||   运算符是   &   和   |   运算符的条件版本:    
   
x   &&   y   运算对应于   x   &   y   运算,但仅当   x   为   true   时才计算   y。    
x   ||   y   运算对应于   x   |   y   运算,但仅当   x   为   false   时才计算   y。

 

24. 得到字符串对应的枚举的值

    Convert.ToInt32(Enum.Parse(typeof( TradingServiceType), "Consignment", false));

 

25. decimal.Round 不是四舍五入    decima.tostring("N2") 则是四舍五入
    decimal money=2.9m   money*0.1 错误  应为 money*(decimal)0.1
    将string 转换为 decimal 用 bool result=decimal.tryprase(sss,out decimal num)

 

26. 不同页面调用一个公共控件,当公共空间内的一个文本框执行回车事件后,有的页面有反应,有的没
    解决办法: 在form 上加上 defaultbutton="btnQuery"  
    例:后台程序的 order.ascx

 

27. 判断一个数是否有有效的小数位
    if( (int)num== num )
    http://topic.csdn.net/t/20050615/14/4084169.html

 

28. sql 判断日期   datetime<@inputtime+1  和   datetime<"2009-05-25 23:59:59" 2者区别  前者可以精确取到当天时间。而后者则会将  23:59:59:000 后面的精度忽略不计

 

29. 清空 客户端 file 控件的值
    file控件是一个特殊的控件 只能取值不能赋值
   <input type="file" name="fileName" id="fileID">
    var obj = document.getElementById("fileID");
    obj.outerHTML = obj.outerHTML;
    或者
    var file1=document.getElementById("fileID"); 
    file1.select(); 
    document.execCommand('Delete') 

 

30. 用xml 数据绑定下拉列表框
    a.将xml数据放到 一个数组,将数组绑定到下拉框
    b.用dataset读取xml 再绑定

 

31. WS调用问题
    如果被调方没加soapheader 掉用方加上 则调用失败
   
32. 页面回车按钮触发事件
    当回车后,页面自动调用第一个按钮事件。(提交按钮比普通按钮优先)。
    如果想手工设定执行某个特定按钮,则需在此按钮调用代码后加上 return false;否则会接着调用页面默认的第一个按钮事件
    代码参看: 求购后台--业务管理--orderdetail.aspx
  
33. javascript 替换换行符 
    replace 方法只会替换第一个符合条件的
    可用正则表达式解决 replace(/[/n]/g,'<br />')   /g 标示全部字符串
 
34. datatable 复杂操作

 

35. 游戏币  属性表 游戏物品种类表  现需要 取 游戏ID 游戏NAME 属性.支持定做  支持物品种类。装备
    SQL 语句

    KEY:  case when  then  end

 

36. javascript 方法参数中 含有单引号  如  οnclick=" fc(' aa'   ')" 遇到这种情况 将单引号替换成别的字符,取的时候再进行转换

 

37. 防止页面刷新后再次执行上一次操作;
解决办法:在操作方法最后重新指向本页

 

38. 跳到登录页面 完成登录跳转回来时 页面部分参数被截掉
解决办法:在跳转到登陆页面前 将当前地址 HttpUtility.UrlEncode 编码下  这样就不会出现截取字符情况

 

39. 服务器端控件 执行页面跳转时,如果采取前台JS跳转,则需在跳转代码后加 return false;否则点击后无反应。

 

40. machineKey的作用在于下述场景:
ASP.net 使用 forms authentication 时的 cookie 数据的加密和解密。以确保这部分数据不会被篡改。
viewstate 数据的加密和解密。以确保这部分数据不会被篡改。
使用进程外session(out-of-process session)时,对会话状态标识进行验证。

 

41. as(C# 参考)

用于在兼容的引用类型之间执行转换。  如果用于值类型转换  则结果为 null

 

42. 控件包含代码块(即 <% ... %>),因此无法修改控件集合。

结构: 采用模板的页面  <asp:content >  <div runat="server"> <%=ssss%> </div>  </asp:content>  在后台 container1.innerhtml='' 时 报错

 

43. javascript 将字符串转换为数字

在javascript中有转换字符串到数字的函数:parseInt,parseFloat

对于这样的字符串'12aaa', '123'这样的字符串转换是没有问题的。可是对于'008','0001'这样的字符串,很容易理解为自然会转换为8,1嘛,呵呵,你如果这样认为,恭喜您,您中标了。总以为javascript这样无类型的解释型语言是万能的,但最终得到的结果却是0。太意外了啊!!!,最终偶的解决方案是,先用Number来转,如下:

var s = '0001';

var num = new Number(s);

alert(num);  // 输出1

如果转换失败则返回NaN,可以用isNaN函数来判断是否是数字。这样基本解决了转换错误的问题,


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/aquadp/archive/2008/04/04/2248708.aspx

 

44. 生成随机数重复问题

for (int i=0;i<n;++i)
{
    var rnd = new Random ();//用系统时间作为种子
    Console.Write ("{0},",rnd.Next());
}
97,97,97,97,....97,30,30,30,30,30,30,30,30,30,30,30,30,....,27,27,27,27,27,27,....
这是因为Windows系统时钟的更新频率大概在10ms左右.而这个for循环的执行显然要快
得多.于是在一段执行时间内Environment.TickCount (Random的默认种子)或是C的time函数返回的
都是同一个值.从而导致rnd.Next在一段时间内返回一个常数.
正确代码:
var rnd = new Random ();//用系统时间作为种子
for (int i=0;i<n;++i)
{
    Console.Write ("{0},",rnd.Next());
}

45.  一个方法多个地方调用
因可以多处调用,各个地方的日志记录不完全相同。因此最好将方法的返回结果设为bool  各处调用后根据结果再自行记录日志.


46.  前台JS方法参数中用到客户信息中包括一些特殊字符 如 % / ‘ “  会造成页面JS出错

在后台代码中将用户信息字符串转换成unicode编码,这样就不会对页面JS产生影响
 public static string StringToUnicode(string srcText)
        {
            string dst = "";
            char[] src = srcText.ToCharArray();
            for (int i = 0; i < src.Length; i++)
            {
                byte[] bytes = Encoding.Unicode.GetBytes(src[i].ToString());
                string str = @"/u" + bytes[1].ToString("X2") + bytes[0].ToString("X2");
                dst += str;
            }
            return dst;
        }


47. 网站防攻击
需注意的几个方向: SQL注入   XSS跨站点攻击


48.数据库连接字符串 技巧

我们在桌面上点右键,新建一个文本文件。然后我们选中那个文件按F2,呵呵,就是改名拉,将名字改成aaa.udl。然后我们双击这个文件,然后点击提供程序,看吧,出现了很多数据库连接是不是?选你自己想连的数据库。

如果你跟我一样是连access,你就选Microsoft Jet4.0 OLE DB Provider,
如果是连sql server,就选Microsoft OLE DB Provider for SQL Server,
如果连Oracle,就选Microsoft OLE DB Provider for Oracle,

然后下一步,填入你的数据库路径,数据库的登陆名和密码,然后点测试连接,测试通过,OK,现在请注意,一定要把允许保存密码的勾打上,不然等会连的时候会找不到密码,提示你用户名密码出错的,然后确定。再用记事本打开aaa.udl文件,看,连接字符串出来了,最后一行就是的,easy吧,我们把最后一行(也就是Provider开头的那一行)复制到Web.config文件中的connectionString=""的两个"中间,好,这就OK了~


49. 数据库连接  连接未关闭。 连接的当前状态为打开。问题的解决
public static  SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

  if (conn.State ==ConnectionState.Closed)
    {
            conn.Open();
    }

一定要在打开前判断


50. 一次批量插入多条数据

insert into Table(id,name) select 'id1','name1' union select 'id2','name2' .....


51. 读取XmlNode节点内子节点的值 需注意地方
node.SelectSingleNode("name")   name 的大小写必须和节点保持一致 否则取不到该节点


52.  数据库中取数据后转换
DateTime 类型   取出后转换 DateTime.Parse(row["column"].ToString())   会损失精度   2010-4-15 22:29:00.997    997 丢失
原因是  DateTime的ToString方法,而DateTime的不带格式参数的ToString方法是不会返回毫秒的
解决办法 强制转换  DateTime dt = (DateTime)row["column"],   事先判断是不是为空


53. c# 中正则表达式中 /b
如果用到 /b 则需在字符串中再转义下,否则 /b在C#中含义为 退格


54.  使用接口传输 xml 字符串时遇到的问题
a.内容里有单引号 ,导致插入SQL语句报错。 解决办法:将单引号 转义下 SQL中2个单引号表示一个单引号
b. 出现十六进制值 0x0B 是无效的字符错误,原因是xml中包含低位非打印字符。替换下这些字符 http://hi.baidu.com/zhuojingzhao/blog/item/9f73cfcda084071b00e9287d.html

 

55. 免费短信接口 :sms.api.bz
    https://sms.api.bz/fetion.php?username=您的移动飞信登录手机号&password=您的移动飞信登录密码&sendto=接收短信的飞信好友手机号(也可以是你自己的手机号)&message=短信内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值