Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET-常见问题_C#_Asp.net_Vb.net - Fatal编程技术网

C# 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时,我发现总是会遇到一些意想不到的事情,需要花费很长时间进行调试。我认为,有一个综合的清单对于那些“奇怪的错误”情况来说是非常好的,并且可以扩展我们对平台中奇怪现象的认识

所以:用你的一个“抓住”来回答

我将开始:
在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