`
duoerbasilu
  • 浏览: 1479267 次
文章分类
社区版块
存档分类
最新评论

ASP.Net中基于UpdatePanel的无刷新上传(用户控件)(C#)

 
阅读更多

注:这个方法并不能真正实现无刷新上传文件,只是能够使得上传文件后,滚动条的位置保持不变,相当于无刷新上传。

1、建立用户控件Up.ascx

2、在用户控件中添加UpdatePanel,代码如下

<asp:UpdatePanel ID="UpdatePanel1" runat="server" RenderMode="Block"UpdateMode="Conditional">
<ContentTemplate>
<asp:FileUpload ID="FileUp" runat="server" Height="24px" />
<asp:Button ID="UPing" runat="server" Text=" 上传 " Width="73px" Height="24px" />
<div id="Msg" runat="server" >等待上传...</div>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="UPing"/>
</Triggers>
</asp:UpdatePanel>

3、在Up.ascx.cs中添加如下代码

public partial class Up : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//这里 Msg.ClientID 很重要,要是直接引用,在父级页面Msg的ID可能会成这个样子 UP1_Msg ,其中UP1是父级页面内引用该控件的ID
//这里的js要考虑在浏览器中解析正确,就必须考虑转义符 \
string js = "javascript:document.getElementById('" + Msg.ClientID + "').innerHTML = '上传中...(可以在这里放置动画图片 或者 iframe 调用其他页面(aspx)实现上传进度的检测以及上传事件的处理)';";
UPing.Attributes.Add("onclick", js);
}
}
public event EventHandler onClick
{
add
{
UPing.Click += value;
//UPing.Text = "事件已经加载" + DateTime.Now.ToString() + value.Method.ToString();
}
remove
{
UPing.Click -= value;
//UPing.Text = "事件已经卸载" + DateTime.Now.ToString();
}
}

/// <summary>
/// 消息
/// </summary>
public string msg
{
get
{
//获取
return Msg.InnerHtml.ToString();
}
set
{
//设置
Msg.InnerHtml = value;
}
}

/// <summary>
/// FileUpload (组件的公开)
/// </summary>
public FileUpload FileUpload
{
get
{
//获取
return FileUp;
}
set
{
//设置
FileUp = value;
}
}

}

4、创建网页(红色代码要注意)

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="无刷上传.aspx.cs" Inherits="MyLove"MaintainScrollPositionOnPostback="true" Debug="true"%>
<%@ Register src="UP.ascx" tagname="UP" tagprefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无刷上传</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>


<div style="height:500px; background:#CCFFCC;">我是为了看看上传数据提交后,有啥变化没有</div>

<uc1:UP ID="UP1" runat="server" />

<asp:UpdatePanel ID="UpdatePanel1" runat="server" RenderMode="Block" UpdateMode="Conditional">
<ContentTemplate>
<uc1:UP ID="UP2" runat="server" />
</ContentTemplate>

<Triggers>
<asp:PostBackTrigger ControlID="UP2"/>
</Triggers>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>

5、后台代码部分

public partial classMyLove: System.Web.UI.Page
{

protected void Page_Load(object sender, EventArgs e)
{
UP1.onClick += new EventHandler(UP1_UPing_Click);//注册动作(事件,使用代理)
UP2.onClick += new EventHandler(UP2_UPing_Click);
}

/// <summary>
/// 上传保存事件1(就是平时按钮用的)
/// </summary>
/// <param name="sender"></param>

/// <param name="e"></param>

protected void UP1_UPing_Click(object sender, EventArgs e)
{
if (UP1.FileUpload.HasFile)
{
long L1 = UP1.FileUpload.FileContent.Length / 1024;//字节流
int L2 = UP1.FileUpload.PostedFile.ContentLength / 1024;//字节长度

string FileName = UP1.FileUpload.FileName;

UP1.msg = "实例化为:UP1" + DateTime.Now.ToString() + "<br/>上传字节流长度是:" + L1.ToString() + "KBit" + "<br/>上传文件大小是(千字节):" + L2.ToString() + "KB.";

//保存
UP1.FileUpload.SaveAs(Server.MapPath(@"~/temp/") + FileName);

}
else
{
UP1.msg = "不要忽悠我,没文件啊!" + DateTime.Now.ToString();
}

}

/// <summary>
/// 上传保存事件2
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void UP2_UPing_Click(object sender, EventArgs e)
{

if (UP2.FileUpload.HasFile)
{
string FileName = UP2.FileUpload.FileName;
UP2.msg = "实例化为:UP2 " + DateTime.Now.ToString() + "<br/>上传的文件名是:" + FileName;

//保存
UP2.FileUpload.PostedFile.SaveAs(Server.MapPath(@"~/temp/") + FileName);
}
else
{
UP2.msg = "你就接着忽悠吧 ~ " + DateTime.Now.ToString();
}
}
}

如果出现 检测到有潜在危险的 Request.Form 值。 则在.aspx文件头中加入这句: <%@ Page validateRequest="false" %>


参考网址:我就是根据这个网址内容修改的,感谢作者。

http://apps.hi.baidu.com/share/detail/15914216

分享到:
评论

相关推荐

    ASP.NET_AJAX入门系列:使用UpdatePanel控件.doc

    ASP.NET_AJAX入门系列:使用UpdatePanel控件.docASP.NET_AJAX入门系列:使用UpdatePanel控件.doc

    Asp.net的Timer控件使用

    该控件能够定是引发整个页面回送,当它与Updatepanel空间搭配使用时,就可以定时引发异步回送并进行局部刷新

    vs.net控件updatePanel实现无刷新的方法

    vs.net控件updatePanel实现无刷新的方法,需要的朋友可以参考一下

    [ASP.NET.AJAX编程参考手册(涵盖ASP.NET.3.5及2.0)].(美)霍斯拉维.扫描版.pdf

    第20章 在用户控件和自定义控件中使用UpdatePanel 第21章 页面生命周期和异步的局部页面呈现 第22章 ASP.NET AJAX客户端PageRequestManager 第23章 异步局部页面呈现:服务器端处理 第24章 异步局部页面呈现:客户端...

    ASP.NET 2.0+SQL Server 2005全程指南-源代码

    14.3.3 UpdatePanel控件 14.3.4 UpdateProgress控件 14.3.5 Timer控件 14.4 本章小结 实践篇 第15章 个人网站初学者工具包 15.1 个人网站初学者工具包概述及创建 15.2 系统通用类及配置文件 15.2.1 配置文件...

    ASP.NET AJAX经典范例168 VC#版 (代码) Part 12

    主要内容包括:ASP .NET AJAX技术慨述、实现异步局部更新页面、UpdatePanel编程功能、 PageRequestManager的使用方法、Timer控件、Control Toolkit方法、结合 OOP功能、如何在客户端JavaScript调用web服务、如何从...

    在ASP.NET中使用Google Map

    为了避免这种现象,我们只需要把这个Button控件加入UpdatePanel控件中。 &lt;br&gt;3.重新运行该页面,可看到该页面已经一切正常了。 &lt;br&gt; &lt;br&gt;自动更新和GPS导航 &lt;br&gt; &lt;br&gt;我们可以使用AJAX框架中的Timer...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    ASP.NET 4高级程序设计(第4版)》【原版书为:Pro ASP.NET 4 in C# 2010】是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的...

    ASP.NET 3.5 开发大全

    1.1.5 ASP.NET 3.5新增控件 1.1.6 ASP.NET 3.5 AJAX 1.2 .NET应用程序需框架 1.2.1 什么是.NET应用程序框架 1.2.2 公共语言运行时(CLR) 1.2.3 .NET Framework 类库 1.3 安装Visual Studio 2008 1.3.1 安装Visual ...

    ASP.NET 3.5 开发大全word课件

    这是整部学习资料 由于太大第一章免费供应给大家 在我的上传资源中 如果觉得还不过希望大家给个好评 当然具体本书的作者就不深究了把! 第1章 认识ASP.NET 3.5 1.1 什么是ASP.NET 1.1.1 .NET历史与展望 1.1.2 ASP...

    ASP.NET AJAX经典范例168 VC#版 (代码) Part 7

    主要内容包括:ASP .NET AJAX技术慨述、实现异步局部更新页面、UpdatePanel编程功能、 PageRequestManager的使用方法、Timer控件、Control Toolkit方法、结合 OOP功能、如何在客户端JavaScript调用web服务、如何从...

    ASP.NET3.5从入门到精通

    1.1.5 ASP.NET 3.5 新增控件 1.1.6 ASP.NET 3.5 AJAX 1.2 .NET 应用程序需框架 1.2.1 什么是.NET 应用程序框架 1.2.2 公共语言运行时(CLR) 1.2.3 .NET Framework 类库 1.3 安装Visual Studio 2008 1.3.1 安装...

    ASP.NET AJAX经典范例168 VC#版 (代码) Part 11

    主要内容包括:ASP .NET AJAX技术慨述、实现异步局部更新页面、UpdatePanel编程功能、 PageRequestManager的使用方法、Timer控件、Control Toolkit方法、结合 OOP功能、如何在客户端JavaScript调用web服务、如何从...

    ASP.NET AJAX经典范例168 VC#版 (代码) Part 14

    主要内容包括:ASP .NET AJAX技术慨述、实现异步局部更新页面、UpdatePanel编程功能、 PageRequestManager的使用方法、Timer控件、Control Toolkit方法、结合 OOP功能、如何在客户端JavaScript调用web服务、如何从...

    ASP.NET AJAX经典范例168 VC#版 (代码) Part 8

    主要内容包括:ASP .NET AJAX技术慨述、实现异步局部更新页面、UpdatePanel编程功能、 PageRequestManager的使用方法、Timer控件、Control Toolkit方法、结合 OOP功能、如何在客户端JavaScript调用web服务、如何从...

    ASP.NET 3.5 开发大全1-5

    1.1.5 ASP.NET 3.5新增控件 1.1.6 ASP.NET 3.5 AJAX 1.2 .NET应用程序需框架 1.2.1 什么是.NET应用程序框架 1.2.2 公共语言运行时(CLR) 1.2.3 .NET Framework 类库 1.3 安装Visual Studio 2008 1.3.1 安装Visual ...

    ASP.NET 3.5 开发大全11-15

    1.1.5 ASP.NET 3.5新增控件 1.1.6 ASP.NET 3.5 AJAX 1.2 .NET应用程序需框架 1.2.1 什么是.NET应用程序框架 1.2.2 公共语言运行时(CLR) 1.2.3 .NET Framework 类库 1.3 安装Visual Studio 2008 1.3.1 安装Visual ...

    ASP.NET3.5揭秘(卷2)part1

     10.4 使用UpdatePanel控件  10.5 使用Timer控件  10.6 使用UpdateProgress控件  10.7 小结  第11章 使用ASP.NET AJAX ControlToolkit  11.1 使用ASP.NET AJAX Control Toolkit  11.2 Toolkit控件...

    ASP.NET 3.5 揭秘(卷2).part2

     10.4 使用UpdatePanel控件  10.5 使用Timer控件  10.6 使用UpdateProgress控件  10.7 小结  第11章 使用ASP.NET AJAX ControlToolkit  11.1 使用ASP.NET AJAX Control Toolkit  11.2 Toolkit控件...

Global site tag (gtag.js) - Google Analytics