C# ASP.NET-常见问题
当我使用ASP.NET时,我发现总是会遇到一些意想不到的事情,需要花费很长时间进行调试。我认为,有一个综合的清单对于那些“奇怪的错误”情况来说是非常好的,并且可以扩展我们对平台中奇怪现象的认识 所以:用你的一个“抓住”来回答 我将开始:C# ASP.NET-常见问题,c#,asp.net,vb.net,C#,Asp.net,Vb.net,当我使用ASP.NET时,我发现总是会遇到一些意想不到的事情,需要花费很长时间进行调试。我认为,有一个综合的清单对于那些“奇怪的错误”情况来说是非常好的,并且可以扩展我们对平台中奇怪现象的认识 所以:用你的一个“抓住”来回答 我将开始: 在ASP.NET(VB)下,在try/catch块内执行Response.Redirect不会停止当前响应的执行,这可能会导致对同一会话执行两个并发响应。自定义控件的生命周期与同名的页面生命周期事件不完全匹配。不要在page init事件之后动态添加控件,因为它
在ASP.NET(VB)下,在try/catch块内执行Response.Redirect不会停止当前响应的执行,这可能会导致对同一会话执行两个并发响应。自定义控件的生命周期与同名的页面生命周期事件不完全匹配。不要在page init事件之后动态添加控件,因为它会破坏viewstate树。如果有,请不要使用记事本编辑web.config重音字符,它将替换为编码错误的字符。不过看起来还是一样的。只有您的应用程序将无法运行。Viewstate。。。如果你正在使用它。。。如果您不注意它,它可能会失控。您根本无法引用应用程序根文件夹上方的任何内容。我必须维护的所有代码看起来仍然是用vb6编写的,显示出完全不了解较新的样式
我说的是CreateObject(),过多的块,和/或代替AndAlso/OrElse,Len()代替.Length(),s/o匈牙利前缀疣,Dim MyVariable没有类型,函数没有返回类型。。。我可以接着说。自定义控件仅在构建控件时受设计器支持,或者在构建使用该控件的页面时受设计器支持,但不能同时受两者支持。必须跳转才能将.ClientID属性转换为javascript 如果生命周期的呈现阶段创建了一个脚本,为每个服务器控件设置一个var,该脚本与自动初始化为clientID值的控件同名,那就更好了。或者可能有一些方法可以轻易地触发这个动作 嗯。。。我打赌我可以通过反射自己设置一个方法。(VB.NET)如果通过属性的Get访问器将对象发送到具有ByRef关键字的函数中,它实际上会尝试使用属性的set访问器更新对象 例:
UpdateName(ByRef aName作为字符串)
UpdateName(Employee.Name)
将尝试使用Employee的Name属性上的Set来更新名称。整个生命周期都是这样
并不是说我认为它有什么问题,只是你会惊讶于有那么多人在理解它之前就开始从事大型ASP.Net项目,而不是相反。因此,这就成了一个难题
请注意,我说的是大型项目:我认为解决生命周期问题的最佳方法是先自己处理几个较小的项目,如果你把它们搞砸了,这没什么大不了的。当使用没有数据源控件的gridview时(即将数据集直接绑定到控件)您需要手动实现排序和分页事件,如下所示:
我今天刚学到:与GridView和ListView一起使用的Bind()方法并不存在。它实际上隐藏了一些反射魔法,将其转换为Eval()和某种变量赋值 这样做的结果是调用如下内容:
<%# FormatNameHelper(Bind("Name")) %>
看起来完全正确的做法将失败。有关更多详细信息,请参阅。Page\u加载在控件处理程序之前运行。因此,您不能在事件处理程序中进行更改,然后在页面加载中使用这些更改。当母版页中有控件(如登录控件)时,这将成为一个问题。你可以通过重定向来绕过这个问题,但这绝对是一个难题。Linq:如果你使用Linq To SQL,你在数据上下文上调用
SubmitChanges()
,它会抛出一个异常(例如,重复键或其他约束冲突),在调试时,有问题的对象值会保留在你的内存中,并且将在以后每次调用SubmitChanges()
时重新提交
现在这里有一个真正的提示:即使您按下IDE中的“停止”按钮并重新启动,坏值仍将保留在内存中我不明白为什么有人认为这是一个好主意-但是系统托盘中弹出的ASP.NET小图标保持运行,并且似乎保存了对象缓存。如果你想刷新你的内存空间,你必须右击该图标并强制关闭它!明白了 如果在与ASP.Net应用程序相同的虚拟目录中运行经典ASP应用程序,则对该应用程序的第一次点击必须在ASP.Net页面上。这将确保使用正确的上下文配置构建AppPool。如果要点击的第一个页面是经典ASP页面,则结果可能因应用程序而异。通常,AppPool被配置为使用最新的框架。创建一个类似于中继器的控件,并且不知道INamingContainer中的
不知道框架中的大量现有和可扩展功能。经常重做的事情是成员资格、角色、授权、站点地图。然后是可以定制的控件和相关标记,以缓解客户机ID等问题。还有一些简单的事情,比如不知道如何正确使用.config文件将名称空间自动导入模板,以及能够在目录基础上这样做。像标记表达式这样鲜为人知的东西有时也很有价值。当然,与所有框架一样,存在一个学习曲线,并且总是有一些需要改进的地方,但是通常情况下,定制和扩展现有框架比滚动自己的框架更好 调试是ASP.Net的一项非常酷的功能,但是只要你在app_code文件夹中更改一些代码,就会触发一个r