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,数据 — 架构比较: 可比出两个数据库之间结构的任何差异,如多了一个字段,存储过程增加了一段代码等,之后可更新
2,数据 — 数据比较: 比较两个数据库同名表之间数据差异,是否多了记录,修改了某一条记录等等。(注:两个表都要有主键,不然比不出更新)


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:父页面A.aspx弹出窗口B.aspx;关闭B.aspx页面刷新A.aspx;在B.aspx的点击关闭按钮时执行下列代码:

?? 1. string popupScript = “<script language=’javascript’>” + “alert(‘Submit successfully!’);window.opener.document.forms[0].submit();window.opener =null;window.close();” + “</script>”;? //可看出aspx都有一个from,所谓任何动态如button click都是form submit的结果。若无form,则页面会报错。
?? 2.???????????? Page.ClientScript.RegisterStartupScript(this.GetType(), “PopupScript1”, popupScript);

案例1:父页面A.aspx弹出窗口B.aspx;在B.aspx页面弹出C.aspx;关闭C.aspx并关闭B.aspx并刷新父页面A.aspx;在C.aspx的点击关闭按钮时执行下列代码:

?? 1. string popupScript = “<script language=’javascript’>” + “window.opener.opener.document.forms[0].submit();window.opener.opener = null;window.opener.close();window.opener=null;window.close();” + “</script>”;
?? 2.???????? Page.ClientScript.RegisterStartupScript(this.GetType(), “PopupScript1”, popupScript);

说明:

1.alert(‘Submit successfully!’):弹出窗口显示信息’Submit successfully!’;

2.window.opener.opener.document.forms[0].submit():重新提交父页面的信息;

3.window.opener.opener = null;window.opener.close();关闭上级窗口不弹出提示框;

4.window.opener=null;window.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,判断文件夹与文件是否存在及创建
if (System.IO.Directory.Exists(Server.MapPath("file")) == false)//如果不存在就创建file文件夹
             {
                 System.IO.Directory.CreateDirectory(Server.MapPath("file"));
             }
System.IO.Directory.Delete(Server.MapPath("file"),true);//删除文件夹以及文件夹中的子目录,文件    

判断文件的存在
if (System.IO.File.Exist(Server.MapPath("~/Back/Data.xml"))
{
//存在文件
}  
else
{
    File.Create("c.txt");
}

2,写文件
StreamWriter sw = new StreamWriter(“c.txt”, false, code);
     sw.Write('as');
 sw.Flush();
读文件
 StreamReader sr = null;
 string str = "";
            try
            {
                sr = new StreamReader(temp, code);
                str = sr.ReadToEnd();   //   读取文件   
            }


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.符号“/”指程序运行所在根目录,即IIs所在目录。
2.符号“~/”,则是指网站所在根目录。
得到当前网站某一文件的方法:HttpContext.Current.Server.MapPath(“~//Ship/EmsTemplate.htm”)
3,URL:Request.ServerVariables[“HTTP_HOST”]


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中对各个WebForm控件引入以前没有的EnableViewState属性。这个属性究竟有什么用。我们知道对于 WebForm而言,其代码是在服务器端的,以处理客户端的请求。当用户通过浏览器浏览网页的时候,会对网页进行某些操作,比如打开新链接,或单击某个按钮。在ASP中,这些是通过脚本语言对其进行处理,之后再传递给服务器端。但是在ASP.NET下,由于采用了code behind技术,在coding的时候,通常是将以前客户端完成的工作放到了服务器端。

那么,服务器是怎么知道客户的操作的呢?比如我在文本框输入的内容,或者单击了登录按钮,服务器端是怎样得到这些信息的呢?因为没有这些信息,服务器端就无法响应客户的请求。原理就是ASP.NET引用了viewstate的机制。在服务器端保存了网页各个控件及页面的状态,这其中包括各个控件在页面上的布局,和他们各自的属性。这些值就保存在ViewState下。我们可以观察Aspx页面的html源代码,假设这个页面上有一个button按钮,和一个listBox控件,html文件如下:

<input type=”hidden” name=”__VIEWSTATE” value=”dDwzODYzNDM5NTU7Oz7FvviJbq45bDa7QJaumIiOhZ8mOQ==” />

?<input type=”submit” name=”Button1″ value=”Button” id=”Button1″ style=”height:40px;width:96px;Z-INDEX: 101; LEFT: 200px; POSITION: absolute; TOP: 240px” />
?<select name=”ListBox1″ size=”4″ id=”ListBox1″ style=”width:152px;Z-INDEX: 102; LEFT: 176px; POSITION: absolute; TOP: 120px”></select>

我们它的不同之处,一是少了以前所必须响应客户端事件的脚本语言,一是多了一个名为”_VIEWSTATE”的属性。其值是一长串字符。类型为 “hidden”。这个值记录的就是各个控件和页面的状态信息。当用户对页面进行相关操作的时候,状态值发生改变,并将改变的值传递给服务器端。服务器端在比较改变后的状态值和初始值之间的区别,以响应具体的请求。

一旦页面的控件很多,这种频繁的传递控件状态值对网络的消耗是很大的,因此,ASP.Net提供了EnableViewState属性,系统默认的值为true。当设置为true时,在传递状态值时就包括该控件;如果设置为false,则传递状态值时则不包括它。既然状态值不包括该控件,则客户端对它进行的操作,服务器端是不响应的。

我们可以做个实验,在Button1_Click事件中,编写代码:

ListBox.Items.Add(”客户端点击按钮一次!”);

此时运行该应用程序,单击网页上的按钮,在ListBox中会添加内容,不断地单击,内容则不断添加。如果我们将ListBox的EnableViewState属性改为false时,不断单击按钮,则只能添加一次。

这样有什么好处呢?如果我们在开发Web应用程序时,某些控件是不需要接受用户的操作或只需要接受一次操作的时候,我们可以将这些控件的EnableViewState属性改为false,这样可以优化我们的程序,提高网络访问的速度。

注:Textbox Checkbox Checkbox List RadioButtonList
上面控件的状态通过IPostBackEventHandler 和 IPostBackDataHandler接口处理,而不是ViewState的机制,所以EnableViewState没有效果。


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,界面层,逻辑层,数据处理层。
界面层负责接收客户录入的信息,并返回结果

一个用户进入系统,根据其角色进行相应的数据读取,显示
界面层:用户账号的记录,传入到逻辑层,逻辑层根据其账号,找到其部门,传到数据处理层,得到此部门的数据信息,之后层层返回,让界面层显示。
即界面层:数据的收集与显示,结果以entity传放到逻辑层。
逻辑层:根据界面层的数据进行判断,选择逻辑层进行数据处理。

注:存储过程名称如参数:trantype等不要出现在界面层,逻辑层,可对每个trantype包装一下处理。


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,弹出窗口
(1)ClientScript.RegisterClientScriptBlock(GetType(), “AmountError”, “<script language=’javascript’>alert(‘产品最多只能打九折!’);</script>”);
?? ? 在页面前加入alert,这样执行的话会先弹出alert,因后面的还没有加载,故会出现一个空白页面,点确定之后再全部出现所有页面。
(2)ClientScript.RegisterStartupScript(GetType(), “AmountError”, “<script language=’javascript’>alert(‘产品最多只能打九折!’);</script>”);
??? 在页面后加入alert,页面加载完之后再弹出,不会有空白页面的情况。
?? 最好用(2)

2,在.CS程序中设置一个public 变量,在页面中用<%=AmountError%>,因服务器处理很快,会很快返回,出现近似局部刷新的结果。


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: 得到传来的?之后的参数