ASP.NET-常见问题
当我使用ASP.NET时,我发现总是遇到意外的事情,这些事情需要花费很多时间进行调试。我认为,对于这些"怪异错误"情况,合并使用这些列表将非常有用,而且可以扩展我们在平台中的奇异知识。
所以:用" Gotcha"之一回答!
我将开始:
在ASP.NET(VB)下,在try / catch块中执行Response.Redirect不会停止当前响应的执行,这可能导致针对同一Session执行两个并发的Response。
解决方案
回答
自定义控件的生命周期与同名页面生命周期事件并不完全匹配。
回答
不要在页面初始化事件之后动态添加控件,因为它将破坏viewstate树。
回答
如果我们有重音字符,请不要使用记事本编辑web.config,它将用错误的编码替换它。虽然看起来一样。仅应用程序将无法运行。
回答
Viewstate ...(如果正在使用)...如果不注意它,可能会失控。
回答
我们根本无法在应用程序的根文件夹上方引用任何内容。
回答
我必须维护的所有代码仍然看起来像是用vb6编写的,显示了对新样式的完全无知。
我在说诸如CreateObject(),过多的<%%>块,和/或者代替AndAlso / OrElse,用Len()代替.Length(),诸如此类的匈牙利前缀疣,Dim MyVariable(无类型),函数没有返回类型...我可以继续。
回答
设计器仅在构建控件或者构建使用该控件的页面时才支持自定义控件,但不能同时支持两者。
回答
必须跳过循环才能将.ClientID属性获取到javascript中。
如果生命周期的呈现阶段创建了一个脚本,该脚本为每个服务器控件设置了一个var,其名称与自动初始化为clientID值的控件的名称相同,那就太好了。也许有某种方法可以轻松触发此操作。
嗯...我敢打赌我可以自己通过反射建立一个方法。
回答
(VB.NET)如果通过属性的Get访问器将对象发送给具有ByRef关键字的函数,则它实际上将尝试使用属性的Set访问器来更新对象。
前任:
``UpdateName(以字符串形式引用名称)''
" UpdateName(Employee.Name)"将尝试通过使用Employee的Name属性上的Set来更新名称。
回答
整个生命周期的事情一般。
并不是我觉得有什么问题,只是我们会对在理解之前开始从事大型ASP.Net项目的人数感到惊讶,反之亦然。因此,它成为陷阱。
请注意,我说的是大型项目:我认为与生命周期相适应的最好方法是首先自己处理一些较小的项目,如果我们将它们搞砸了,那没什么关系。
回答
当使用没有数据源控件的gridview(即直接将数据集绑定到控件)时,我们需要手动实现排序和分页事件,如下所示:
http://ryanolshan.com/technology/gridview-without-datasourcecontrol-datasource/
回答
我今天才学到这一点:与GridViews和ListViews一起使用的Bind()方法不存在。实际上,它隐藏了一些Reflector魔术,将其转换为Eval()和某种变量赋值。
这样做的结果是像这样的调用:
<%# FormatNameHelper(Bind("Name")) %>
看起来完全有效的方法将会失败。有关更多详细信息,请参见此博客文章。
回答
Page_Load在控件处理程序之前运行。因此,我们无法在事件处理程序中进行更改,然后在页面加载中使用这些更改。当我们在母版页中具有控件(例如登录控件)时,这将成为一个问题。我们可以通过重定向解决该问题,但这绝对是一个陷阱。
回答
Linq:如果我们使用的是Linq-To-SQL,则在数据上下文上调用SubmitChanges()并引发异常(例如重复键或者其他约束冲突),在调试时,有问题的对象值将保留在内存中,并且每次我们随后调用SubmitChanges()
时都会重新提交。
现在,这才是真正的关键:即使我们在IDE中按"停止"按钮并重新启动,错误值也会保留在内存中!我不明白为什么有人会认为这是一个好主意,但是弹出在系统托盘中的ASP.NET图标仍然保持运行状态,并且似乎可以保存对象缓存。如果要刷新内存空间,则必须右键单击该图标,然后将其强行关闭! GOTCHA!
回答
如果要在与ASP.Net应用程序相同的虚拟目录中运行Classic ASP应用程序,则该应用程序的第一击必须位于ASP.Net页面上。这将确保使用正确的上下文配置来构建AppPool。如果要访问的第一页是经典ASP页,则结果可能因应用程序而异。通常,将AppPool配置为使用最新的框架。
回答
进行类似中继器的控件,并且不了解INamingContainer
。
回答
不了解框架中现有和可扩展功能的堆。通常重做的事情是成员资格,角色,授权,站点地图。然后是可以自定义以减轻客户端ID等问题的控件和关联的标签。还有一些简单的事情,例如不知道正确使用.config文件将名称空间自动导入到模板中,以及能够基于目录执行此操作。诸如标签表达式之类的鲜为人知的事物有时也会很有价值。当然,与所有框架一样,都有学习曲线,总有一些需要改进的地方,但是更多的是自定义和扩展现有框架,而不是自己滚动框架。
回答
调试是ASP.Net的一项非常酷的功能,但是一旦更改app_code文件夹中的某些代码,就会触发应用程序的重新生成,从而导致所有会话丢失。
在调试网站时,这可能会很烦人,但是我们可以使用" StateServer模式"轻松阻止这种情况:这只是启动服务,而web.config中需要更改的行:
请参阅msdn:http://msdn.microsoft.com/en-us/library/ms178586.aspx
- InProc模式,它将会话状态存储在Web服务器上的内存中。这是默认值。
- StateServer模式,它将会话状态存储在称为ASP.NET状态服务的单独进程中。这样可以确保在重新启动Web应用程序后保留会话状态,并使会话状态可用于Web场中的多个Web服务器。
- SQL Server ...
- 风俗 ...
- 离开!