这个问题之所以存在是因为它具有历史意义,但它不被认为是本网站的一个好的,主题上的问题,所以请不要将它作为证据,你可以在这里提出类似的问题.
总有一些功能在边缘场景中很有用,但正因如此,大多数人都不了解它们.我要求的是教科书通常不会教授的功能.
你知道的是什么?
Joh*_*han 335
在测试时,您可以将电子邮件发送到计算机上的文件夹而不是SMTP服务器.把它放在你的web.config中:
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\" />
</smtp>
</mailSettings>
</system.net>
Run Code Online (Sandbox Code Playgroud)
Joh*_*han 119
throw new HttpException(404, "Article not found");
Run Code Online (Sandbox Code Playgroud)
这将被ASP.NET捕获,它将返回customErrors页面.在最近的.NET日报帖子中了解到这一点
Sco*_*man 75
这是最好的一个.将其添加到您的web.config中,以便更快地进行编译.这是通过此QFE发布的3.5SP1 .
<compilation optimizeCompilations="true">
Run Code Online (Sandbox Code Playgroud)
快速摘要:我们在ASP.NET中引入了一个新的optimizeCompilations开关,可以在某些情况下大大提高编译速度.有一些捕获,所以请继续阅读更多细节.此交换机目前可作为3.5SP1的QFE使用,并将成为VS 2010的一部分.
ASP.NET编译系统采用了一种非常保守的方法,这种方法可以消除它在"顶级"文件发生变化时所做的任何先前的工作."顶级"文件包括bin和App_Code中的任何内容,以及global.asax.虽然这适用于小型应用程序,但它对于非常大的应用程序几乎无法使用.例如,客户遇到了一个案例,在对"bin"程序集进行任何更改后,需要花费10分钟来刷新页面.
为了减轻痛苦,我们添加了一个"优化的"编译模式,它采用了一种不那么保守的重新编译方法.
通过这里:
Mar*_*ade 73
HttpContext.Current将始终允许您访问当前上下文的Request/Response/etc.,即使您无法访问Page的属性(例如,来自松散耦合的帮助程序类).
通过调用Response.Redirect(url, false )将用户重定向到另一个页面后,可以继续在同一页面上执行代码
如果你想要的只是一个编译的页面(或任何IHttpHandler),你不需要.ASPX文件.只需将路径和HTTP方法设置为指向web.config文件中元素中的类即可.<httpHandlers>
甲页对象可以从被检索.ASPX文件编程通过调用PageParser.GetCompiledPageInstance(virtualPath,aspxFileName,上下文)
Tro*_*unt 70
machine.config级别的零售模式:
<configuration>
<system.web>
<deployment retail="true"/>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
覆盖web.config设置以将调试强制为false,打开自定义错误并禁用跟踪.不再忘记在发布之前更改属性 - 只需将它们全部配置为开发或测试环境并更新生产零售设置.
Bin*_*ony 59
在内容页面中为MasterPages启用intellisense
我相信这是一个非常知名的黑客
大多数情况下,当你想使用它时,你必须使用findcontrol方法并从内容页面中转换主页面中的控件,MasterType 指令将在visual studio中启用intellisense
只需在页面中添加一个指令
<%@ MasterType VirtualPath="~/Masters/MyMainMasterPage.master" %>
Run Code Online (Sandbox Code Playgroud)
如果您不想使用虚拟路径,请改用类名
<%@ MasterType TypeName="MyMainMasterPage" %>
Run Code Online (Sandbox Code Playgroud)
在这里获取完整的文章
Joh*_*han 58
HttpContext.Items作为请求级缓存工具
Rad*_*094 52
有两件事在我脑海中脱颖而出:
1)您可以从代码中打开和关闭Trace:
#ifdef DEBUG
if (Context.Request.QueryString["DoTrace"] == "true")
{
Trace.IsEnabled = true;
Trace.Write("Application:TraceStarted");
}
#endif
Run Code Online (Sandbox Code Playgroud)
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";
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以拥有任意数量的.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>
Run Code Online (Sandbox Code Playgroud)
您可以在ASPX中拥有未出现在Class1中的控件,反之亦然,但您需要记住检查控件是否为空.
Fly*_*wat 48
您可以使用:
Request.Params[Control.UniqueId]
Run Code Online (Sandbox Code Playgroud)
要在初始化viewFate之前获取控件的值(此时Control.Text等将为空).
这对Init中的代码很有用.
Dan*_*plo 46
的WebMethods.
您可以将ASP.NET AJAX回调用于放置在ASPX页面中的Web方法.您可以使用[WebMethod()]和[ScriptMethod()]属性修饰静态方法.例如:
[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static List<string> GetFruitBeginingWith(string letter)
{
List<string> products = new List<string>()
{
"Apple", "Banana", "Blackberry", "Blueberries", "Orange", "Mango", "Melon", "Peach"
};
return products.Where(p => p.StartsWith(letter)).ToList();
}
Run Code Online (Sandbox Code Playgroud)
现在,在ASPX页面中,您可以执行以下操作:
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
<input type="button" value="Get Fruit" onclick="GetFruit('B')" />
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
并使用以下命令通过JavaScript调用服务器端方法:
<script type="text/javascript">
function GetFruit(l)
{
PageMethods.GetFruitBeginingWith(l, OnGetFruitComplete);
}
function OnGetFruitComplete(result)
{
alert("You got fruit: " + result);
}
</script>
Run Code Online (Sandbox Code Playgroud)
Ric*_*kNZ 45
在开始长时间运行的任务之前,检查客户端是否仍然连接:
if (this.Response.IsClientConnected)
{
// long-running task
}
Run Code Online (Sandbox Code Playgroud)
Cra*_*gTP 44
ASP.NET的一个鲜为人知且很少使用的特性是:
它很少使用,因为只有你需要它的特定情况,但是当你需要它时,它是如此方便.
一些关于这个小知识的文章:
使用ASP.NET 2.0中的标记映射在ASP.NET中进行
标记映射
从上一篇文章:
标记映射允许您在编译时在Web应用程序的每个页面上交换兼容的控件.一个有用的示例是,如果您有一个库存ASP.NET控件,例如DropDownList,并且您希望将其替换为从DropDownList派生的自定义控件.这可以是一个定制的控件,以提供更优化的查找数据缓存.您可以通过修改web.config来实现ASP.NET,而不是编辑每个Web表单并使用您的自定义版本替换内置的DropDownLists:
<pages>
<tagMapping>
<clear />
<add tagType="System.Web.UI.WebControls.DropDownList"
mappedTagType="SmartDropDown"/>
</tagMapping>
</pages>
Run Code Online (Sandbox Code Playgroud)
All*_*nde 43
HttpModules.这座建筑非常优雅.也许不是一个隐藏的功能,但也很酷.
Chr*_*ann 34
您可以在.aspx页面中使用ASP.NET注释来注释掉包含服务器控件的页面的完整部分.注释掉的内容永远不会发送给客户端.
<%--
<div>
<asp:Button runat="server" id="btnOne"/>
</div>
--%>
Run Code Online (Sandbox Code Playgroud)
and*_*eer 34
代码表达式构建器
样本标记:
Text = '<%$ Code: GetText() %>'
Text = '<%$ Code: MyStaticClass.MyStaticProperty %>'
Text = '<%$ Code: DateTime.Now.ToShortDateString() %>'
MaxLenth = '<%$ Code: 30 + 40 %>'
Run Code Online (Sandbox Code Playgroud)
代码表达式构建器的真正之处在于,您可以在非数据绑定情况下使用数据绑定表达式.您还可以创建执行其他功能的其他Expression Builders.
web.config中:
<system.web>
<compilation debug="true">
<expressionBuilders>
<add expressionPrefix="Code" type="CodeExpressionBuilder" />
Run Code Online (Sandbox Code Playgroud)
使这一切成为现实的cs类:
[ExpressionPrefix("Code")]
public class CodeExpressionBuilder : ExpressionBuilder
{
public override CodeExpression GetCodeExpression(
BoundPropertyEntry entry,
object parsedData,
ExpressionBuilderContext context)
{
return new CodeSnippetExpression(entry.Expression);
}
}
Run Code Online (Sandbox Code Playgroud)
Bin*_*ony 33
ASHX文件类型的用法:
如果你想输出一些基本的html或xml而不经过页面事件处理程序那么你可以用简单的方式实现HttpModule
将页面命名为SomeHandlerPage.ashx,并将下面的代码(只有一行)放入其中
<%@ webhandler language="C#" class="MyNamespace.MyHandler" %>
Run Code Online (Sandbox Code Playgroud)
然后是代码文件
using System;
using System.IO;
using System.Web;
namespace MyNamespace
{
public class MyHandler: IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/xml";
string myString = SomeLibrary.SomeClass.SomeMethod();
context.Response.Write(myString);
}
public bool IsReusable
{
get { return true; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ome*_*ten 27
Run Code Online (Sandbox Code Playgroud)<asp:Label runat="server" ID="labelText" ie:Text="This is IE text" mozilla:Text="This is Firefox text" Text="This is general text" />
那一点让我感到意外.
Cra*_*hie 26
我在一个asp.net应用程序上工作,该应用程序经过了一家领先的安全公司的安全审计,我学会了这个简单的技巧来防止一个鲜为人知但却很重要的安全漏洞.
以下说明来自:http: //www.guidanceshare.com/wiki/ASP.NET_2.0_Security_Guidelines_-_Parameter_Manipulation#Consider_Using_Page.ViewStateUserKey_to_Counter_One-Click_Attacks
考虑使用Page.ViewStateUserKey来对抗一键攻击.如果您对调用者进行身份验证并使用ViewState,请在Page_Init事件处理程序中设置Page.ViewStateUserKey属性以防止一键攻击.
void Page_Init (object sender, EventArgs e) {
ViewStateUserKey = Session.SessionID;
}
Run Code Online (Sandbox Code Playgroud)
将属性设置为您知道对每个用户唯一的值,例如会话ID,用户名或用户标识符.
当攻击者创建包含名为__VIEWSTATE且已填充ViewState数据的隐藏表单字段的网页(.htm或.aspx)时,会发生一键式攻击.可以从攻击者先前创建的页面生成ViewState,例如包含100个项目的购物车页面.攻击者诱使不知情的用户浏览该页面,然后攻击者将该页面发送到ViewState有效的服务器.服务器无法知道ViewState源自攻击者.ViewState验证和HMAC不会抵御此攻击,因为ViewState有效且页面在用户的安全上下文下执行.
通过设置ViewStateUserKey属性,当攻击者浏览到页面以创建ViewState时,该属性将初始化为他或她的名称.当合法用户将页面提交给服务器时,它将使用攻击者的名称进行初始化.因此,ViewState HMAC检查失败并生成异常.
Joh*_*han 25
HttpContext.Current.IsDebuggingEnabled
这非常适合确定要输出哪些脚本(最小版本或完整版本)或您在开发中可能需要的任何其他内容,但不能直播.
Joh*_*han 20
包含在ASP.NET 3.5 SP1中:
Rya*_*pat 19
使用configSource拆分配置文件.
您可以使用web.config文件中的configSource属性将配置元素推送到其他.config文件,例如,而不是:
<appSettings>
<add key="webServiceURL" value="https://some/ws.url" />
<!-- some more keys -->
</appSettings>
Run Code Online (Sandbox Code Playgroud)
...您可以将整个appSettings部分存储在另一个配置文件中.这是新的web.config:
<appSettings configSource="myAppSettings.config" />
Run Code Online (Sandbox Code Playgroud)
该myAppSettings.config文件中:
<appSettings>
<add key="webServiceURL" value="https://some/ws.url" />
<!-- some more keys -->
</appSettings>
Run Code Online (Sandbox Code Playgroud)
这对于将应用程序部署到客户并且不希望它们干扰web.config文件本身并且只是希望它们能够仅更改一些设置的情况非常有用.
参考:http://weblogs.asp.net/fmarguerie/archive/2007/04/26/using-configsource-to-split-configuration-files.aspx
Mar*_*ade 16
默认情况下,自定义控件的标记之间的任何内容都将添加为子控件.这可以在AddParsedSubObject()覆盖中截获,以进行过滤或其他解析(例如,LiteralControls中的文本内容):
protected override void AddParsedSubObject(object obj)
{ var literal = obj as LiteralControl;
if (literal != null) Controls.Add(parseControl(literal.Text));
else base.AddParsedSubObject(obj);
}
Run Code Online (Sandbox Code Playgroud)
...
<uc:MyControl runat='server'>
...this text is parsed as a LiteralControl...
</uc:MyControl>
Run Code Online (Sandbox Code Playgroud)
Kev*_*off 13
如果您有ASP.NET生成RSS源,它有时会在页面顶部添加一行.这不会使用常见的RSS验证器进行验证.您可以通过将页面指令放在页面<@Page>底部来解决它.
Tyl*_*ler 12
在ASP.NET v3.5添加路由之前,您可以通过编写HTTPModule并在页面管道的早期重写请求(如BeginRequest事件)来创建自己的友好URL.
像http:// servername/page/Param1/SomeParams1/Param2/SomeParams2这样的网址会被映射到下面的另一个页面(通常使用正则表达式).
HttpContext.RewritePath("PageHandler.aspx?Param1=SomeParms1&Param2=SomeParams2");
Run Code Online (Sandbox Code Playgroud)
DotNetNuke有一个非常好的HttpModule,可以为他们友好的网址做到这一点.对于无法部署.NET v3.5的计算机仍然有用.
Gra*_*ham 12
我的团队使用它作为黑客:
WebRequest myRequest = WebRequest.Create("http://www.google.com");
WebResponse myResponse = myRequest.GetResponse();
StreamReader sr = new StreamReader(myResponse.GetResponseStream());
// here's page's response loaded into a string for further use
String thisReturn = sr.ReadToEnd().Trim();
Run Code Online (Sandbox Code Playgroud)
它将网页的响应加载为字符串.您也可以发送帖子参数.
当我们需要便宜又快速的东西时,我们用它代替ASCX/AJAX/WebServices.基本上,它是跨服务器访问Web可用内容的快捷方式.事实上,我们昨天刚才称它为"Redneck Web Service".
wom*_*omp 11
您是否知道可以在IIS或Visual Studio之外运行ASP.Net?
整个运行时打包并准备好在任何想要尝试的过程中托管.使用ApplicationHost,HttpRuntime以及HttpApplication类,你也可以磨碎的.aspx页,并从他们那里得到闪亮的HTML输出.
HostingClass host = ApplicationHost.CreateApplicationHost(typeof(HostingClass),
"/virtualpath", "physicalPath");
host.ProcessPage(urlToAspxFile);
Run Code Online (Sandbox Code Playgroud)
和你的托管班:
public class HostingClass : MarshalByRefObject
{
public void ProcessPage(string url)
{
using (StreamWriter sw = new StreamWriter("C:\temp.html"))
{
SimpleWorkerRequest worker = new SimpleWorkerRequest(url, null, sw);
HttpRuntime.ProcessRequest(worker);
}
// Ta-dah! C:\temp.html has some html for you.
}
}
Run Code Online (Sandbox Code Playgroud)
fra*_*lic 10
CompilationMode ="Never"是一个在某些ASP.NET站点中至关重要的功能.
如果您有一个ASP.NET应用程序,其中ASPX页面经常通过CMS或其他发布系统生成和更新,则使用CompilationMode ="Never"非常重要.
如果没有此设置,ASPX文件更改将触发重新编译,这将很快使您的应用程序域重新启动.这可以消除会话状态和httpruntime缓存,更不用说重新编译引起的延迟了.
(为了防止重新编译,可以增加numRecompilesBeforeAppRestart设置,但这并不理想,因为它会消耗更多内存.)
此功能的一个警告是ASPX页面不能包含任何代码块.为了解决这个问题,可以将代码放在自定义控件和/或基类中.
在ASPX页面不经常更改的情况下,此功能大多无关紧要.
VS chokes的有效语法:
<input type="checkbox" name="roles" value='<%# Eval("Name") %>'
<%# ((bool) Eval("InRole")) ? "checked" : "" %>
<%# ViewData.Model.IsInRole("Admin") ? "" : "disabled" %> />
Run Code Online (Sandbox Code Playgroud)
我想到了一个功能,有时你需要隐藏页面的一些部分.你可以用javascript或使用这个简单的代码:
if (Request.Browser.Crawler){
HideArticleComments();
Run Code Online (Sandbox Code Playgroud)
与optimizeCompilations ="true"解决方案类似,这里有另一个解决方案,可以加快您在构建之间等待的时间(非常好,特别是如果您正在处理大型项目): 创建基于ram的驱动器(即使用RamDisk)和将默认的"Temporary ASP.NET Files"更改为此基于内存的驱动器.
有关如何执行此操作的详细信息,请访问我的博客:http://www.wagnerdanda.me/2009/11/speeding-up-build-times-in-asp-net-with-ramdisk/
基本上你首先配置一个RamDisk(再次,在我的博客中有一个免费ramdisk的链接),然后根据这个改变你的web.config:
<system.web>
....
<compilation debug="true" tempDirectory="R:\ASP_NET_TempFiles\">
....
</compilation>
....
</system.web>
Run Code Online (Sandbox Code Playgroud)
它大大增加了我的开发时间,你只需要为你的计算机投入内存:)
快乐编程!
瓦格纳丹达
它指示当前请求是否来自本地计算机.
if( Request.IsLocal )
{
LoadLocalAdminMailSettings();
}
else
{
LoadServerAdminMailSettings();
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,任何Web表单页面都继承自System.Web.UI.Page类.如果您希望页面继承自继承自定义基类的内容,该System.Web.UI.Page怎么办?
有一种方法可以限制任何页面从您自己的基类继承.只需在您的上添加一个新行web.config:
<system.web>
<pages pageBaseType="MyBasePageClass" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
注意:这仅在您的课程是独立课程时才有效.我的意思是一个没有代码隐藏的类,看起来像<%@ Page Language="C#" AutoEventWireup="true" %>
将位于App_Code文件夹中的类附加到Global Application Class文件.
ASP.NET 2.0 - Global.asax - 代码隐藏文件.
这也适用于Visual Studio 2008.
GEO*_*HET -6
这似乎是一个巨大而模糊的问题......但我会加入反射,因为它使我能够做一些非常强大的事情,例如可插拔 DAL 等。
| 归档时间: |
|
| 查看次数: |
35060 次 |
| 最近记录: |