ASPX文件

在ASPX文件中,如果不调用@ Assembly 说明,可以使用哪些汇编? ASP.NET连接下列缺省汇编: Mscorlib.dll, System.dll, System.Data.dll, System.Drawing.dll, System.Web.dll, System.Web.Services.dll ,System.Xml.dll。
这些缺省汇编在Machine.config的<assemblies>段落中定义。
你可以修改Machine.config文件或在本地 Web.config文件中包含这个段落。 如何设置Web控制端AutoPostBack属性值为真,使一个网页向服务端提交信息? 用JavaScript标记和动态HTML(DHTML)结束斜线。在你的网页中加入: <asp:TextBox ID="UserName" AutoPostBack="true" RunAt="server" /> 服务端将返回:
 <input name="UserName" type="text" id="UserName" οnchange="__doPostBack('UserName','')" language="javascript" /> . . .
<script language="javascript">
 <!-- function __doPostBack(eventTarget, eventArgument) {
 var theform = document.ctrl0; . . . theform.submit();
} // --> </script> <input>
标记包含onchange属性,当客户端的输入框的文字发生变化,就激活JavaScript函数__doPostBack, 自动向服务端提交表单(theform)。 有时在ASP.NET应用中能看到包含ASHX文件。ASHX文件是什么? ASHX文件包含HTTP处理模块,ASP.NET用其处理接收到的HTTP请求。以下实例说明了一个简单的处理过程:
 <%@ WebHandler Language="C#" Class="Hello"%>
 using System.Web;
 public class Hello : IHttpHandler {
    public void ProcessRequest (HttpContext context) {
        string name = context.Request["Name"];
        context.Response.Write ("Hello, " + name);
    }
    public bool IsReusable { get { return true; } }
}
如果把这些代码放到一个名为Hello.ashx的ASHX文件中,然后请求URL http://.../hello.ashx?Name=Jeff,它就返回"Hello, Jeff"的HTTP响应。ASPX文件为开发者提供一个方便的方法来处理HTTP请求。不必修改CONFIG文件或IIS的资源(metabase)。 可否创建我自己的ASP.NET服务控件? 可以。你可以从已有的相应控件类继承并修改,或者直接继承System.Web.UI.Control。这里给 出一个简单的"Hello, world"实例:
using System;
 using System.Web;
using System.Web.UI;
 namespace Wintellect {
    public class HelloControl : Control {
        protected override void Render (HtmlTextWriter writer) {
            writer.Write ("Hello, World!"); }
     }
 }
客户控件重载了继承于Control的虚方法Render,用HtmlTextWriter类型的变量writer输出。 System.Web.UI.Page.RegisterClientScriptBlock 方法是干什么的?在编写自己的ASP.NET控件时是否要用到它? RegisterClientScriptBlock是用户控件的注册模块,对客户端的脚本进行注册。为什么要用它呢?这样当网页含有多次脚本调用实例时 就不必多次调用脚本。下面是一个客户控件,叫做AlertButton,它起着类似于<input type="submit">的作用,点击它时,产生JavaScript弹出窗口。
using System;
using System.Web;
using System.Web.UI;
 using System.Text;
 namespace Wintellect {
     public class AlertButton : Control {
        protected string _Text; protected string _Message;
        public string Text { get { return _Text; } set { _Text = value; } }
        public string Message { get { return _Message; } set { _Message = value; } }
         protected override void OnPreRender (EventArgs e) {
                Page.RegisterClientScriptBlock ( "__doAlert", "<script language=/"javascript/">/n" + "<!--/n"+ "function __doAlert (message)/n" + "{/n" + " alert (message);/n" + "}/n" + "-->/n"+ "</script>" ); }
     protected override void Render (HtmlTextWriter writer) {
        StringBuilder builder = new StringBuilder ();
         builder.Append ("<input type=/"submit/" value=/"");
        builder.Append (_Text);
         builder.Append ("/" οnclick=/"javascript:__doAlert (/'");
        builder.Append (Message);
        builder.Append ("/');/" />");
        writer.Write (builder.ToString ()); }
    }
}
 如果控件的注册前缀是win的话,那么下面就声明了AlertButton控件,点击它时,弹出"Hello, world"信息窗。 <win:AlertButton Text="Click Me" Message="Hello, world" RunAt="server" /> 该控件用RegisterClientScriptBlock注册客户端脚本模块,这个脚本模块包含由<input>标记定义的 __doAlert函数。不管页面上有多少AlertButton,它只返回一次。RegisterClientScriptBlock总是由控制端的 OnPreRender方法调用,使得ASP.NET以此控制脚本的输出位置。 Page.RegisterClientScriptBlock与Page.RegisterStartupScript有何不同? 前者返回客户函数脚本,后者返回非打包函数的客户脚本,换句话说,返回初始化执行代码。后者的脚本位置放在文件的末尾,这样使得其它相关元素可在执行初始 化程序前先加载完毕。 能否定制日历控件,使得用户只能选择某些特定日子,而且只从今天之后算起? 是的。秘密是DayRender事件处理。日历中的每个日单元都能触发这个事件。下面的例子说明限制用户只选择星期五和星期六:
<asp:Calendar OnDayRender="OnDayRender" RunAt="server" /> . . .
 void OnDayRender (Object sender, DayRenderEventArgs e) {
    e.Day.IsSelectable = (e.Day.Date.DayOfWeek == DayOfWeek.Friday ||     e.Day.Date.DayOfWeek == DayOfWeek.Saturday) && e.Day.Date >= DateTime.Now; }
 向DayRender事件传递参数的DayRenderEventArgs有一个叫做Day的属性,用其确定处理的日期。将Day的 IsSelectable属性置为True或False就可以决定哪些日子可以合法显示出来。 在操作application之前,是否一定要锁定? 只在要自动重复修改值的情况下。如: Application.Lock (); Application["ItemsSold"] = (int) Application["ItemsSold"] + 1; Application["ItemsLeft"] = (int) Application["ItemsLeft"] - 1; Application.UnLock (); 在修改状态前锁定,修改后解锁。这样可以确保其它线程不能同时修改这个值,否则会交叉修改,产生矛盾。 ASP.NET的application缓存没有提供象application 那样的锁定(Lock)和解锁(UnLock)方法。是否意味着不需要加锁? 不。那意味着你要用自己的加锁机制。System.Threading.ReaderWriterLock是一个很适合的工具。 可以把锁定(Lock)看成是ReaderWriterLock的一个实例。以下示例说明如何在修改application缓存时加锁。
 lock.AcquireWriterLock (Timeout.Infinite);
 Cache["ItemsSold"] = (int) Cache ["ItemsSold"] + 1;
Cache["ItemsLeft"] = (int) Cache ["ItemsLeft"] - 1;
lock.ReleaseWriterLock ();
以下是如何从缓存中读取"ItemsSold"、"ItemsL"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a3676212

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值