会Java,也会C#,个人觉得C#在WinForm方面还是很容易使用的,但ASP.NET尤其是Ajax方面的东西,实在是不太敢恭维,个人记录下一些BUG,以便查阅。
ASP.NET控件:
1、当将TextBox设置为ReadOnly="True"后,若绑定My97DatePicker之类的javascript日历控件,后置代码中获取的值总是其初始值,也就是说,无法改变其值,除非在后置代码中写入TextBox.Text="XXXXXX...",不知道是不是所有的javascript代码赋值都不能获取到。
解决方案:将TextBox换为<input type="text" readonly="readonly" runat="server" />,这样既可以在服务器端使用又不会产生ReadOnly无法赋值的BUG。
2、当<input type="text" runat="server" />的onclick和onserverclick同时启用时,若onclick这样写return confirm("你确定要删除吗?"),则不论选择“确定”还是“取消”,onserverclick都不会执行;相反,如果onclick这样写confirm("你确定要删除吗?"),那不论选择“确定”还是“取消”,onserverclick都会执行,也就是永远无法用“确定”和“取消”让用户选择是否执行onserverclick操作。
解决方案一:将<input type="text" runat="server" />换成服务器控件Button,将onclick事件对应到Button的OnClientClick事件,将onserverclick事件对应到Button的OnClick事件,就可以正常使用。
解决方案二:将<input type="text" runat="server" />换成服务器控件LinkButton,客户端的onclick事件照旧,然后设定LinkButton的CommandName,在GridView等数据控件里面的RowCommand事件里面根据CommandName执行对应操作,但此法必须在LinkButton处于数据控件中时使用,有局限性,建议采用方案一为主。
3、使用Ajax.dll进行Ajax相关操作时,若标明[AjaxMethod]特性的方法中有关于.aspx文件中的服务器控件的引用,则该方法执行到该句就不会继续执行下去。
解决方案:由于[AjaxMethod]特性的方法只涉及数据通信,故不要让其中含有服务器控件的引用,若需要用到服务器控件的值,由javascript方法传入,类似于document.getElementById("<%=服务器控件ID.ClientID %>").value,同时,设置页面呈现的代码完全可由javascript方法完成,[AjaxMethod]特性的方法只需要完成三件事——接收数据(可选)、处理数据、返回数据(可选)。