ScriptManager.RegisterStartupScript()和Response.Write()区别

小宏 2010-02-03 10:46:58
先谢谢各位老大了!!!
...全文
243 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小宏 2010-02-04
  • 打赏
  • 举报
回复
谢谢各位了!!!
非常详细结贴了
CalvinDo 2010-02-03
  • 打赏
  • 举报
回复
ScriptManager.RegisterStartupScript()和Response.Write()区别

ScriptManager.RegisterStartupScript() 向客户端注册脚本。
Response.Write() 将一个字符写入HTTP响应输出流。(简单点就是,将字符输出)

这2者有关系么?
ck11926375 2010-02-03
  • 打赏
  • 举报
回复
使用Response.Write()方法,会破坏页面的标准(会出现在页面的上方)
破坏了Asp.Net的模型,所有建议大家都不要使用
fwacky 2010-02-03
  • 打赏
  • 举报
回复
就在html 页面上的 位置不同,
《1》一个制定位置
《2》一个在页面头部
《3》一个在尾部
fwacky 2010-02-03
  • 打赏
  • 举报
回复
一般来说有三种情况
(1)在前台放置<asp:Literal Runat="server"></asp:Literal>指定位置输出
(2)后台通过RegisterStartupScript和RegisterClientScriptBlock输出
(3)Response.Write输出
举例如下
(1)
前台
<asp:Literal ID="myLiteral" Runat="server"></asp:Literal>
后台
this.myLiteral.Text+="<script>alert('test');</script>";
查看源代码可以看到原来的
<asp:Literal ID="myLiteral" Runat="server"></asp:Literal>
位置变成了
<script>alert('test');</script>
(2)
为了更加清楚看到两个的区别,前台如下
<form id="Form1" method="post" runat="server">
<input type="hidden" value="test" id="myhiden">
</form>
后台如下
Page.RegisterStartupScript("","<script>alert('RegisterStartupScript:'+document.all.myhiden.value)</script>");
Page.RegisterClientScriptBlock("","<script>alert('RegisterClientScriptBlock:'+document.all.myhiden.value)</script>");
结果如下:只出现对话框显示RegisterStartupScript:test
查看源代码如下:
<form name="Form1" method="post" action="WebForm4.aspx" id="Form1">
<input type="hidden" name="__VIEWSTATE" value="dDwtNjU0MzcyMTk1Ozs+NmbLf6dWkF/Q/FLKKsdPPfhFXr0=" />
<script>alert('RegisterClientScriptBlock:'+document.all.myhiden.value)</script>
<input type="hidden" value="test" id="myhiden">
<script>alert('RegisterStartupScript:'+document.all.myhiden.value)</script>
</form>
两者区别不用多说了吧
(3)
我们再加一句Response.Write("test")
查看源代码发现test字样出现在最前面
test
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
用它来输出转向代码比较合适
<script>location.href='page.aspx'</script>

最后在提醒一下大家,有很多人在给一个控件加js代码的时候会这么写:
this.mybody.Attributes["onclick"]="<script>alert('test');</script>";
这么写是不对的
应该是
this.mybody.Attributes["onclick"]="alert('test');";
比如你在前台书写<a onclick=>的时候你会写<a onclick='<script>alert('test')<script>'>吗?
道理是一样的!
但是相反,有的人在
Page.RegisterStartupScript("","<script>alert('test');</script>");的时候不写里面的<script>也是不行的
(虽然名字叫Register...Script)

<script type="text/C#" runat="server"> BinaryReader ms; UploadInfo uploadInfo = null; protected void Page_Load(object sender, EventArgs args) { if (this.IsPostBack) { uploadInfo = this.Session["UploadInfo"] as UploadInfo; if (uploadInfo == null) { // 让父页面知道无法处理上传 const string js = "window.parent.onComplete('error', '无法上传文件。请刷新页面,然后再试一次);"; ScriptManager.RegisterStartupScript(this, typeof(upload_aspx), "progress", js, true); } else { // 让服务端知道我们还没有准备好.. uploadInfo.IsReady = false; try { // 读取要上传的文件 FileStream fs = new FileStream(this.fileUpload.PostedFile.FileName, FileMode.Open, FileAccess.Read); ms = new BinaryReader(fs); string newFile = DateTime.Now.Ticks.ToString(); string exit = this.fileUpload.FileName.Substring(this.fileUpload.FileName.IndexOf('.')); newFile = newFile + exit; UriBuilder url = new UriBuilder("http://192.168.25.27:8056/UploadFileHander.ashx");//上传路径 url.Query = string.Format("filename={0}", newFile);//上传url参数 uploadInfo.ContentLength = this.fileUpload.PostedFile.ContentLength; uploadInfo.FileName = newFile; uploadInfo.UploadedLength = 0; //文件存在 初始化... uploadInfo.IsReady = true; WebClient wc = new WebClient(); wc.Credentials = CredentialCache.DefaultCredentials; wc.OpenWriteCompleted += new OpenWriteCompletedEventHandler(wc_OpenWriteCompleted);//委托异步上传事件 wc.OpenWriteAsync(url.Uri);//开始异步上传 const string js = "window.parent.onComplete('success', '{0} 已成功上传,重命名为:{1}:文件大小:{2}');"; ScriptManager.RegisterStartupScript(this, typeof(upload_aspx), "progress", string.Format(js, Path.GetFileName(this.fileUpload.FileName), DateTime.Now.ToString("yyyy-MM") + "/" + DateTime.Now.Day + "/" + newFile, uploadInfo.ContentLength), true); } catch (Exception ex) { Response.Write(ex.Message); } } } } protected void wc_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e) { int bufSize = 10; int byteGet = 0; byte[] buf = new byte[bufSize]; while ((byteGet = ms.Read(buf, 0, bufSize)) > 0)//循环读取,上传 { e.Result.Write(buf, 0, byteGet);//注意这里 uploadInfo.UploadedLength += byteGet; } // 让父页面知道已经处理上传完毕 e.Result.Close();//关闭 ms.Close(); } script>

62,263

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧