这个问题之所以存在是因为它具有历史意义,但它不被认为是一个好的、主题相关的问题,所以请不要把它作为你可以在这里问类似问题的证据。
总有一些特定场景下会非常有用的功能,但正因为这个原因,大多数人并不知道它们的存在。我想请教那些不通常由课本教授的功能和技巧。
你知道哪些呢?
这个问题之所以存在是因为它具有历史意义,但它不被认为是一个好的、主题相关的问题,所以请不要把它作为你可以在这里问类似问题的证据。
总有一些特定场景下会非常有用的功能,但正因为这个原因,大多数人并不知道它们的存在。我想请教那些不通常由课本教授的功能和技巧。
你知道哪些呢?
在测试时,您可以将电子邮件发送到计算机上的文件夹,而不是SMTP服务器。请将以下代码放入您的web.config文件中:
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\" />
</smtp>
</mailSettings>
</system.net>
throw new HttpException(404, "Article not found");
这将被ASP.NET捕获,后者将返回customErrors页面。在最近的.NET每日技巧文章中了解到这个问题。
以下是最佳方案。将此添加到您的web.config文件中,可以大幅加快编译速度。这是3.5SP1版本后通过此QFE实现的。
<compilation optimizeCompilations="true">
简单概述:我们在ASP.NET中引入了一个新的 optimizeCompilations 开关,它可以在某些情况下大大提高编译速度。但需要注意一些细节,所以请继续阅读。该开关当前作为3.5SP1的 QFE 提供,并将成为VS 2010的一部分。
ASP.NET编译系统采用非常保守的方法,这会导致每当“顶级”文件更改时,它都会清除其之前做的任何工作。 “顶级”文件包括bin和App_Code中的任何内容以及global.asax。虽然对于小型应用程序很好用,但对于非常大型的应用程序来说几乎无法使用。例如,客户遇到了这样的情况:每次更改“bin”程序集后,刷新页面需要花费10分钟。
为了缓解这种痛苦,我们添加了一个“优化”的编译模式,它对重新编译采取了更少保守的方法。
来源:这里
HttpContext.Current 始终会给你访问当前上下文的请求/响应等信息,即使你没有访问页面属性的权限(例如,来自松耦合的辅助类)。
通过调用 Response.Redirect(url, false) ,可以在将用户重定向到另一页后继续在同一页上执行代码。
如果您只需要编译好的 Page(或任何IHttpHandler),则不需要 .ASPX 文件。只需在web.config文件的 <httpHandlers>
元素 中设置路径和 HTTP 方法即可指向该类。
可以通过调用 PageParser.GetCompiledPageInstance(virtualPath,aspxFileName,Context) 从程序中检索 .ASPX 文件中的 Page 对象。
机器配置文件级别的零售模式:
<configuration>
<system.web>
<deployment retail="true"/>
</system.web>
</configuration>
重写web.config设置以强制调试为false,打开自定义错误并禁用跟踪。不再忘记在发布前更改属性 - 只需将它们全部配置为开发或测试环境,并更新生产零售设置。
在内容页启用母版页的智能感知功能
我相信这是一项很少人知道的技巧。
大多数情况下,当您想要使用母版页上的控件时,您必须在内容页中使用findcontrol方法并对控件进行强制类型转换,MasterType指令将在您执行此操作后在Visual Studio中启用智能感知。
只需向页面添加一个指令即可。
<%@ MasterType VirtualPath="~/Masters/MyMainMasterPage.master" %>
如果您不想使用虚拟路径,而是使用类名,则
<%@ MasterType TypeName="MyMainMasterPage" %>
在此处获取完整文章
。HttpContext.Items作为请求级别的缓存工具
我脑海中有两件事情:
1)你可以在代码中开启或关闭 Trace:
#ifdef DEBUG
if (Context.Request.QueryString["DoTrace"] == "true")
{
Trace.IsEnabled = true;
Trace.Write("Application:TraceStarted");
}
#endif
2) 您可以仅使用一个共享的“代码后台”文件来构建多个 .aspx 页面。
构建一个类 .cs 文件:
public class Class1:System.Web.UI.Page
{
public TextBox tbLogin;
protected void Page_Load(object sender, EventArgs e)
{
if (tbLogin!=null)
tbLogin.Text = "Hello World";
}
}
然后您可以拥有任意数量的.aspx页面(在删除VS生成的.designer.cs和.cs代码之后):
<%@ Page Language="C#" AutoEventWireup="true" Inherits="Namespace.Class1" %>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="tbLogin" runat="server"></asp: TextBox >
</div>
</form>
ASPX页面中可能有一些在Class1中不存在的控件,反之亦然,但是您需要记住检查这些控件是否为null。
你可以使用:
Request.Params[Control.UniqueId]
在视图状态初始化之前获取控件的值(此时Control.Text等为空),这对Init中的代码很有用。