Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?Shift+Alt+Enter: 切换全屏编辑

删除多余的using指令,并且排序
当我们新一个类的时候,Visual Studio 会将常用的命名空间using在类的头部。但是在我们写完一个类的时候,有些using是多余的,删除多余的using,再排一下序,可以使代码看起来更清晰。Visual Studio 2008 已经为我们做好了这一切。在代码编辑区点击右键,可以看到”组织 using”菜单,这就是我们需要的了。

复制或删除一行代码时,不用先选择它
如果你想复制一行代码,你只需要简单的按CTRL+c拷贝,然后按CTRL+v粘贴这行就可以了,而不需要选择整行的代码。如果你想删除一行代码,只需按CTRL+x就可以了。

取代其他编辑器里Ctrl+F的方便的增量查找
用过ultraedit会对那两个上下搜索按钮印象深刻,Visual studio里有更厉害的。
操作方法:
1).按Ctrl+I键;
2).键入你要搜索的文本。注意:这时你会看到光标跳至第一个匹配的地方,匹配的文本高亮显示;
3).再次按下Ctrl+I键,光标将跳至下一个匹配的文本;
4).按Ctrl+Shift+I可向后搜索;
5).要停止搜索,按ESC键;

如何在编辑器中进行框式选择
横向选择: 用Shift+方向键即可(或者使用鼠标进行选择)。
纵向选择:只要同时按下Shift+Alt+方向键,你就了解它的不同之处了。
备注:也可以使用鼠标+Alt键完成该操作。前两天我还遇到该提示的一个有意思的用法。有时候我们拷贝网上的文章中的代码时会将行号一起拷进来,使用框式选择可以只选择行号部分,将其删除。

查找匹配的标记:
通过按Ctrl-] 显亮两个匹配的标识之间的所有代码时,按Ctrl-Shift-]显亮整个块

关闭
用鼠标中键点击选项卡可以快速关闭选项卡,不用每次都费劲的移动鼠标去右方去点击关闭按钮了.

设置
1,工具-选项 – 启动:显示空环境
2,工具-自定义,将重新生成解决方案等拖放到工具栏上
3,将代码拖放到工具箱的常规上,可以复用代码


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

生成网站,指的是编译您的网站项目;这个时候,CS文件是不会被编译成为DLL文件的,同时,CS文件也不会消失;该过程,简单的来说,就是预先编译网站的程序,让没有出现任何错误的程序经过编译,但是,网站中的CS文件,是可以打开来查看源代码的。

发布网站就存在质的区别了。简单的来说,发布网站允许您将网站发布之后(可以选择一个目录进行发布),可将发布目录中的程序或网站资源,上传到服务器、或复制粘贴到其它机器上面,之后,设置好IIS等Web服务器,该目录的网站即可运行。

  发布网站的过程,可以将网站中所有的CS文件通过编译之后生成对应的DLL文件,一般在Bin目录里面,同时,CS文件会自动消失;因为CS文件都被编译到DLL动态链接库了,所以就没有必要保留了,因此,发布网站之后,CS文件就没了,但是,由于DLL里面事先就编译好了CS,并且确认了哪个 ASPX文件应该调用哪个CS文件,所以,整个网站,一般仅存在ASPX文件和DLL文件和部分必要的文件,当然,还有网站资源,如图片、音乐、视频等对象。

  这个时候,DLL里面的CS文件是无法看到的,即使使用任何工具打开,也是乱码,这是加密了的,起到一定的安全作用;也可以这样认为,DLL文件是可用不可看的。

总之,如果您想让您的网站项目能够在其它计算机上或服务器上正常运行,就选择“发布网站”,如果您只想在本机测试程序,就使用“生成网站”。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?利用 :ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.Page.GetType(), “message”, “window.alert(‘分配成功!’);”, true);
? ? ? ? ? ? ? ? ? //false时js要加<script>,为true时不用加
代替:ClientScript.RegisterClientScriptBlock(this.GetType(), “alert”, “<script language=’javascript’>window.alert(‘分配成功!’);</script>”);

注:RegisterStartupScript(Control, Type, String, String, Boolean)? 使用 ScriptManager 控件为 UpdatePanel 中的某个控件注册一个启动脚本块,并将该脚本块添加到页面中。 RegisterStartupScript(Page, Type, String, String, Boolean)? 为每个异步回发向 ScriptManager 控件注册一个启动脚本块,并将该脚本块添加到页面中。

ScriptManager.RegisterClientScriptBlock? 代替ClientScript.RegisterClientScriptBlock

在页面上使用:


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

举例:如txtbox1触发局部更新,设置页面所有txtbox颜色为红色,那么结果是:整个页面中只有在ContentTemplate内的txtbox才会变为红色,页面中其它的txtbox不发生任何改变。
注:局部刷新内部按纽若想设txtbox为红色,则要也设置<asp:AsyncPostBackTrigger ControlID=”局部内部”>,以使局部得到刷新。
即:设置一区域为局部刷新,若想使这个区域接受来自服务器传来的数据,发生刷新,则要将触发控件加到AsyncPostBackTrigger,无论是此触发控件在局部外还是局部内。

原理:首先ScriptManager和UpdatePanel在服务器端达成一致,截获了Page的Render()方法并在页面上为需要进行异步回送的控件输出了一些专门的JavaScript脚本。然后在客户端,若这些控件通过_doPostBack()函数试图引发整页的回送,则上面提到的JavaScript脚本将截获这个调用,并将页面中各个用户输入的控件的值,加上当前的试图状态 (ViewState)用XMLHttpRequest对象发送服务器。而此时服务器却对此丝毫不知,仍把它当作一次传统的回发,老老实实地引发了一次完整生命周期,并根据回送生成新的页面结构。随后又是在Page的()方法中,ScriptManager和UpdatePanel再次获取了其中的实现过程,把不在UpdatePanel中的内容统统踢出,只发送给客户端更新的部分。最后,客户端的XMLHttpRequest对象收到了这部分信息,并在不知不觉悄悄地更新了UpatePanel中定义的内容。

<asp:ScriptManager ID=”ScriptManager1″ runat=”server”>
??????? </asp:ScriptManager>
?<asp:UpdatePanel ID=”UpdatePanel1″ runat=”server” ChildrenAsTriggers=”false” UpdateMode=”Conditional”>
??????????? <Triggers>
??????????????? <asp:AsyncPostBackTrigger ControlID=”gvMain”></asp:AsyncPostBackTrigger>?
?? ??? ??? ??? ??? ?//ControlID=”gvMain 指示在哪个控件作出动作时响应
?????????????????? //AsyncPostBackTrigger 指明哪个控件采用异步回送
??????????? </Triggers>
??????????? <ContentTemplate>
????????????? ?
??????????????? <asp:GridView ID=”gvList” runat=”server” CssClass=”grid” Width=”100%”
??????????????? PageSize=”12″ AllowPaging=”True” AutoGenerateColumns=”False” CellPadding=”4″
??????????????? BorderStyle=”Double”>
??????????????? <HeaderStyle CssClass=”gridHeader”></HeaderStyle>
??????????????? <PagerSettings Visible=”False” />
??????????????? <RowStyle CssClass=”gridItem” />
??????????????? <Columns>????????????????? ?
??????????????????????? <asp:BoundField DataField=”CustomerName” HeaderText=”客户” >
?????????????????????? ?
??????????????????????????? <ItemStyle HorizontalAlign=”Left” Width=”15%”/>
?????????????????????? </asp:BoundField>
???????????????????????? <asp:BoundField DataField=”Address” HeaderText=”地址” >
?????????????????????? ?
??????????????????????????? <ItemStyle HorizontalAlign=”Left” Width=”35%”/>
?????????????????????? </asp:BoundField>
??????????????????????? <asp:BoundField DataField=”Tel” HeaderText=”联系电话” >
?????????????????????? ?
??????????????????????????? <ItemStyle HorizontalAlign=”Left” Width=”35%”/>
?????????????????????? </asp:BoundField>
???????????????????????? <asp:BoundField DataField=”UserName” HeaderText=”顾问” >
?????????????????????? ?
??????????????????????????? <ItemStyle HorizontalAlign=”Left” Width=”15%”/>
?????????????????????? </asp:BoundField>
??????????????????? </Columns>
??????????? </asp:GridView>
???????????? ?
??????????? </ContentTemplate>
??????? </asp:UpdatePanel>
????????


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?观看生成的源文件,每个item就是一个option,可加style

<asp:DropDownList ID=”ddlColor” runat=”server”>
??? <asp:ListItem Text=”红” Value=”” style=”background-color:Red”></asp:ListItem>
????? </asp:DropDownList>


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合。它没有用户界面,并且也不会产生任何可视输出。任何用户消息都会被写进Windows事件日志。计算机启动时,服务会自动开始运行。它们不要用户一定登录才运行,它们能在包括这个系统内的任何用户环境下运行。通过服务控制管理器,Windows服务是可控的,可以终止、暂停及当需要时启动。
注:因任何消息都会写到windows事件日志,故当服务启动不了的时候如:“服务启动后又停止了。一些服务自动停止 如果它们没有什么可做的”这种问题出现时,可打开控制面板-管理工具-事件查看器:查看应用程序的日志
2,创建方法:
1. 新建一个项目 从一个可用的项目模板列表当中选择Windows服务
? OnStart ? 控制服务启动执行的代码 ? OnStop ? 控制服务停止执行的代码

2,添加安装程序
1. 将这个服务程序切换到设计视图
2. 右击设计视图选择“添加安装程序”
3. 切换到刚被添加的ProjectInstaller的设计视图
4. 设置serviceInstaller1组件的属性:
1) ServiceName = My Sample Service
2) StartType = Automatic
5. 设置serviceProcessInstaller1组件的属性
1) Account = LocalSystem
NetworkService 在当前正使用 NetworkService 帐户运行的提供程序宿主进程中激活提供程序。
LocalService 在当前正使用 LocalService 帐户运行的提供程序宿主进程中激活提供程序。
LocalSystem 在当前正使用 LocalSystem 帐户运行的提供程序宿主进程中激活提供程序。
6. 生成解决方案

3,安装
1, 打开Visual Studio .NET命令提示
2. 改变路径到你项目所在的bin\Debug文件夹位置(如果你以Release模式编译则在bin\Release文件夹)
3. 执行命令“InstallUtil.exe MyWindowsService.exe”注册这个服务,使它建立一个合适的注册项。
或在.net framework的C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 执行:installutil 服务程序路径+文件名.exe
4, 卸载用:installutil /u 服务程序路径+文件名.exe

4,调试: 服务不能象普通应用程序那样,只要简单地在开发环境下执行就可以调试了。服务必须首先被安装和启动.
1. 安装服务并启动, 设置程序断点
2. 点击“调试”菜单
3. 点击“进程”菜单
4. 确保 显示系统进程 被选
5. 在 可用进程 列表中,把进程定位于你的可执行文件名称上点击选中它
6. 点击 附加 按钮
7. 点击 确定

注:在第5步时若服务为灰色,附件上到….选择中:调试以下代码类型!

3, 定时器使用
1,命名空间 System.Timers; Timer _timer = new Timer();
2,方法及属性
AutoReset 获取或设置一个值,该值指示 Timer 是应在每次指定的间隔结束时引发 Elapsed 事件,还是仅在指定的间隔第一次结束后引发该事件。true时Elapsed定时执行,false执行一次停止
Enabled 获取或设置一个值,该值指示 Timer 是否应引发 Elapsed 事件。
Interval 获取或设置引发 Elapsed 事件的间隔。
定时事件:_timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
private void OnTimedEvent(object source, ElapsedEventArgs e) { }

(2)控件添加

4,实例:定时插入文本

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.IO;
using System.Timers;

namespace MyServices
{

public partial class Service1 : ServiceBase
{
string filePath = “F:\\temp.txt”;
static int i = 0;
Timer _timer = new Timer();
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_timer.AutoReset = true;
_timer.Interval = 2000;
_timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
_timer.Start();

}
private void OnTimedEvent(object source, ElapsedEventArgs e) {

Stream fs = File.OpenWrite(filePath);
TextWriter sw = new StreamWriter(fs);
i++;
sw.WriteLine(i.ToString() + “, hi, this is my first Services”);
sw.Flush();
sw.Close();
}
protected override void OnStop()
{
Stream fs = File.OpenWrite(filePath);
TextWriter sw = new StreamWriter(fs);
sw.WriteLine(“panel !!!!!!!!!!!!!!!”);
sw.Flush();
sw.Close();
}

}
}


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

? 1 response.redirect  这个跳转页面的方法跳转的速度不快,因为它要走2个来回(2次postback),转向后会丢失此页所有的Request的参数
 2  server.transfer  forward  速度快,只需要一次postback ,但是。。。。他必须是在同一个站点下
 3  sever.execute  这个方法主要是用在页面设计上面,而且他必须是跳转同一站点下的页面。这个方法是需要将一个页面的输出结果插入到另一个aspx页面的时候使用,大部分是在表格中,将某一个页面类似于嵌套的方式存在于另一页面。Server.Execute(a.aspx),它和Server.Transfer功能类似。主要的区别在于,server.execute在转向a.aspx执行完成后,还会返回原来的页面继续处理。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

ClientScript.RegisterClientScriptBlock( this.GetType(), “back”, “<script>window.history.go(-2);</script>”);

回点击按纽的时候页面已经刷新了一次,故要返回到之前的要为-2, 而不是-1


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?TextBox: 默认为空字串””, 而不是null

SELECT? @OrderNo = OrderNo FROM bdOrder a
JOIN bmdCustomer b ON a.customerid = b.id WHERE b.Tel = ‘13769688430’

@OrderNo 的值为查询到的值, 若一条数据也没有,则@OrderNo保留原值


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

System.Guid.NewGuid().ToString();


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

ViewState赋值后,在客户端以序列化形式保存。当发生窗体回调之后,服务器在LoadViewState方法里复原。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?服务端返回让页面执行js的方法有三种:
1,Response.Write(“<script>alert(‘开头成功’);</script>”);
??? 因是Response,故一般会将js加在<html>标签之前,有时可能会使css不能正确执行
?2,ClientScript.RegisterClientScriptBlock( this.GetType(), “show”, “<script>alert(‘更新成功’);</script>” );
??? 将js加在紧跟着<form>标签出现之后,第一个
?3,ClientScript.RegisterStartupScript(this.GetType(), “show“, “<script>alert(‘最后成功’);</script>”);
将js加在紧跟着</form>标签出现之前,最后一个

RegisterStartupScript第二个形参指定js的关键字,要唯一,若相同,则以第一个为主
注:还可利用ClientScript让页面载入js文件:
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(),?”MyScript”,? “MyJavaScriptFile.js”)

ClientQueryString: 得到传来的?之后的参数


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?a.直接向控件添加客户端属性
<asp:Button ID=”MyButton” Text=”ClickMe” onmouseover=”this.style.cursor=’pointer'” runat=”server” />

b.调用内置方法
可以通过调用WebControl.Attributes.Add()方法为控件添加客户端属性,如下所示:

MyButton.Attributes.Add(“onmouseover”, “this.style.cursor=’pointer'”);

c. OnClientClick
MyButton.OnClientClick = “alert(‘Hello!’)”;


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

下加入:
整个工程默认接收与发送都按gb2312进行。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
 public static void format(System.Web.UI.Control page, bool bFalg)
        {
            int nPageControls = page.Controls.Count;
            for (int i = 0; i < nPageControls; i++)
            {
                foreach (System.Web.UI.Control control in page.Controls[i].Controls)
                {
                    if (control.HasControls())
                    {
                        format(control, bFalg);
                    }
                    else
                    {
                        if (control is TextBox)
                            (control as TextBox).Enabled = bFalg;
 
                       if (control is Button)
                            (control as Button).Enabled = bFalg;
                        if (control is CheckBox)
                            (control as CheckBox).Checked = bFalg;
}


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?每个页面的生命周期为用户的每一次访问,也就是说每一次客户端与服务器之间的一个往返过程.全局变量的生命周期在此之间. 也就是说,每次都会重建类对象,成员变量当然会初始化。但static的就会被共享。或存入于 ViewState中
1,!IsPostBack 用于第一个生命周期创建时。
2,Page_Load事件会在每次返回到服务器时执行,无论是点击按纽还是其它。故Page_Load主要用于各个控件通用的操作。

由上知:在每次刷新时,页面的状态会被保存,而对应类的非static成员则每次都将被初始化,故在IsPostBack中进行页面控件状态的设置如:btn1.visible =false;
而在之后根据条件做变量的设置。
if( !IsPostBack ){
??? //页面状态设置
???? txtOrderDate_begin.Text = DateTime.Now.ToString(“yyyy-MM-dd”);
???? txtOrderDate_end.Enabled = false;
}
//每次刷新,进行变量设置, 若是从数据库中取值,放到viewstatue,免得每次刷新都要操作数据库
if ( ViewState[“isReviewer”] !=null ){
??? isReviewer = stringhelper.formatobjtobool(ViewState[“isReviewer”]);
}else{
? if (_userBL.GetRoleByAccount(user.Account) == DataBaseConstant.ROLE_REVIEWER)
??????????????? {
??????????????????? isReviewer = true;
?? ??? ??? ??? ???? ViewState[“isReviewer”] = isReviewer;
??????????????? }
}


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1, 可调用的Services , 提供IP,天气, 国内手机号码归属地等服务。
引用方法:工程右健 添加WEB引用,输入URL,引用对应的命名空间如:webxml,生成类调用方法即可。

2,自定义WebServices: 添加新项,WebServices, 在生成的WebService2.cs中编写对应的方法即可。

  • 新建ASP.NET Web服务应用程序
  • 在.asmx.cs的[WebMethod]下编写代码
  • 使用:项目右键,添加Web引用,引用命名空间,直接调用。

3,ajax 引用webservice:单击service属性后面 的按钮,就出现servicereference collection editer??》单击add??》在右边的path属性中填上服务的路径??》单击ok


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

????? string url = @”http://www.input8.com/ip/?ip=59.38.240.54“;
??????????? HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
??????????? httpWebRequest.Method = “GET”;
??????????? HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
??????????? if (((int)httpWebResponse.StatusCode) >= 400)
??????????? {
?????????????? ????? return;
??????????? }
??????????? Stream responseStream = httpWebResponse.GetResponseStream();
??????????? StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
??????????? String result = streamReader.ReadToEnd().Trim();?? //result为得到的URL源码
??????????? httpWebResponse.Close();
??????????? streamReader.Close();


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

每一个ASP.NET程序执行时都会对当前URL的请求进行解析,本文将分析ASP.NET页面请求的原理。当我们在浏览器上输入一个URL时, 流程如下:

首先被WWW服务器截获(inetinfo.exe进程), 该进程首先判断页面后缀, 然后根据IIS中配置决定调用具体的扩展程序。

如aspx就会调用aspnet_isapi.dll, 然后由aspnet_isapi.dll发送给w3wp.exe(iis 工作者进程,IIS6.0中叫做 w3wq.exe,IIS5.0中叫做 aspnet_wp.exe).

接下来就是w3wp.exe调用.net类库进行具体处理,流程如下:

ISAPIRuntime–>HttpRuntime–>HttpApplicationFactory–>HttpApplication–>HttpModule–HttpHandlerFactory–>HttpHandle

1. ISAPIRuntime

主要作用是调用一些非托管代码生成HttpWorkerRequest对象,HttpWorkerRequest对象包含当前请求的所有信息,然后传递给HttpRuntime,这里生成的HttpWorkerRequest对象可以直接在我们的页面中调用的,通过它取得原始的请求信息:

2. HttpRuntime
a. 根据HttpWorkerRequest对象生成HttpContext,HttpContext包含request、response等属性;
b. 调用HttpApplicationFactory来生成IHttpHandler(这里生成的是一个默认的HttpApplication对象,HttpApplication也是IHttpHandler接口的一个实现)
c. 调用HttpApplication对象执行请求

3. HttpApplicationFactory.

主要是生成一个HttpApplication对象:

首先会查看是否存在global.asax文件,如果有的话就用它来生成HttpApplication对象,从这里我们可以看到global.asax的文件名是在asp.net的框架中写死的,不能修改的。如果这个文件不存在就使用默认的对象。

4. HttpApplication

这个是比较复杂也比较重要的一个对象, 首先是执行初始化操作,比较重要的一步就是进行HttpModule的初始化:

HttpApplication代表着程序员创建的Web应用程序。HttpApplication创建针对此Http请求的 HttpContext对象,这些对象包含了关于此请求的诸多其他对象,主要是HttpRequest、HttpResponse、 HttpSessionState等。这些对象在程序中可以通过Page类或者Context类进行访问。

它会读取web.config中所有HttpModule的配置

5. HttpModule

6. HttpHandlerFactory

7. HttpHandler