繁体中文
设为首页
加入收藏
当前位置:网页设计首页 >> AJAX >> asp.net ajax 和 asp.net 2.0中的fileupload合力打造无刷新文件上传控件

asp.net ajax 和 asp.net 2.0中的fileupload合力打造无刷新文件上传控件

2007-12-27 13:10:01  作者:  来源:  浏览次数:20  文字大小:【】【】【

在做一个信息管理平台时用到了图片,就像做一个上传的
正好用的是asp.net ajax
就试着做了一个
不很好

自定义用户控件文件 PicUpload.ascx

1<%@ control language="C#" autoeventwireup="true" inherits="Admin_PicUpload, App_Web_mboefw14" %>
2&nbsp;<asp:Image ID="EP_Image" runat="server" Height="160px" ImageUrl='<%# Bind("EP_Pic") %>'
3    Width="314px" />
4<br />
5<asp:FileUpload ID="FileUpload1" runat="server" />
6<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="上传" />
自定义用户控件文件 PicUpload.ascx.cs

 1using System;
 2using System.Data;
 3using System.Configuration;
 4using System.Collections;
 5using System.Web;
 6using System.Web.Security;
 7using System.Web.UI;
 8using System.Web.UI.WebControls;
 9using System.Web.UI.WebControls.WebParts;
10using System.Web.UI.HtmlControls;
11
12public partial class Admin_PicUpload : System.Web.UI.UserControl
13{
14    protected void Page_Load(object sender, EventArgs e)
15    {
16
17    }
18    protected void Button1_Click(object sender, EventArgs e)
19    {
20        bool fileOK = false;
21        //获取根文件绝对路径
22        string path = Server.MapPath("~/UpLoad/");
23        //如上传了文件,就判断文件格式
24        FileUpload FU = FileUpload1;
25        if (FU.HasFile)
26        {
27            string fileExtension = System.IO.Path.GetExtension(FU.FileName).ToLower();
28            string[] allowedExtensions ={ ".gif", ".jpg", ".png", ".bmp", };
29            for (int i = 0; i < allowedExtensions.Length; i++)
30            {
31                if (fileExtension == allowedExtensions[i])
32                {
33                    fileOK = true;
34                }
35            }
36        }
37        //调用saveas方法,实现上传文件
38        if (fileOK)
39        {
40            try
41            {
42                FileUpload1.SaveAs(path + System.DateTime.Now.ToString("yyyyMMddhhmmss")+FU.FileName);
43                EP_Image.ImageUrl = "../Upload/" + System.DateTime.Now.ToString("yyyyMMddhhmmss") + FU.FileName;
44                Button1.Text = "上传成功";
45            }
46            finally
47            {
48            }
49        }
50        else
51        {
52            Button1.Text = "上传失败,格式不允许";
53        }
54    }
55}
56

逐步完成...
http://www.cnblogs.com/zhiyyang/archive/2006/12/11/589020.html


c:\inetpub\wwwroot\wss\virtualdirectories\80
  添加 <sectionGroup>元素到  <configSections>标记: <configSections>
       <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
          <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere" />
          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
        </sectionGroup>
      </sectionGroup>
    </sectionGroup>
</configSections>
添加 <controls> 节的内容,放在 <system.web>/<pages> 标记中。     <pages>
      <controls>
        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      </controls>
    </pages>   
在<compilation>标记内的<assemblies> 标记中添加下面的内容:       <assemblies>
       <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      </assemblies>
在 <httpHandlers> 节中添加下面的内容:  <httpHandlers>
      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
  </httpHandlers>
在 HttpModules 节中添加下面的注册内容,放在所有已有的注册内容下面   <httpModules>
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </httpModules>
在<SharePoint>/<SafeControls>节中,添加一条 SafeControl ,用于 Microsoft Ajax Extensions的System.Web.UI命名空间。   <SafeControls>
      <SafeControl Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TypeName="*" Safe="True" />
  </SafeControls>
最后,添加下面的 configuration标记到 web.config文件末尾, 在结束标记<configuration>前面。
  <system.web.extensions>
    <scripting>
      <webServices>
      <!-- Uncomment this line to enable the authentication service. Include requireSSL="true" if appropriate. -->
      <!--
        <authenticationService enabled="true" requireSSL = "true|false"/>
      -->
      <!-- Uncomment these lines to enable the profile service. To allow profile properties to be retrieved and modified in ASP.NET AJAX applications, you need to add each property name to the readAccessProperties and writeAccessProperties attributes. -->
      <!--
      <profileService enabled="true"
                      readAccessProperties="propertyname1,propertyname2"
                      writeAccessProperties="propertyname1,propertyname2" />
      -->
      </webServices>
      <!--
      <scriptResourceHandler enableCompression="true" enableCaching="true" />
      -->
    </scripting>
  </system.web.extensions>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
      <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </modules>
    <handlers>
      <remove name="WebServiceHandlerFactory-Integrated" />
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
           type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </handlers>
  </system.webServer>
利用AjaxBaseWebPart进行开发

编写使用该扩展的WebPart最简单的办法就是直接继承别人写好的AjaxBaseWebPart。下面是我用的一个。您也可以用其他的,或自己写一个。
下面是命名空间引用部分:
  using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using System.Web.UI;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint.Utilities;
using System.Web.UI.WebControls;
using System.Drawing;
下面是AjaxBaseWebPart类的实现部分:
      /// <summary>
    /// A base class that implements all the functionality required to use ASP.net Ajax extensions inside WSS
    /// </summary>
    [XmlRoot(Namespace = "Deps.AjaxBaseWebpart")]
    public abstract class AjaxBaseWebpart : Microsoft.SharePoint.WebPartPages.WebPart
    {
        /*
         * The idea and the code behind this base web part was taken from Erics blog post at:
         * http://www.capdes.com/2007/02/ajaxbasepart_easy_aspnet_20_aj.html
         * This basically manages the presence and configuration of the ScriptManager
         * which is required by ASP.net ajax extensions to handle postbacks, ect. This web part also includes
         * a common method for handling errors.
         */
        #region Declarations
        private string _ValidationGroupId;
        private ValidationSummary _ErrorContainer;
        private ScriptManager _AjaxManager;
        #endregion

        #region Constructor
        public AjaxBaseWebpart()
        {

        }
        #endregion

        #region Methods
        /// <summary>
        /// Used to provide a common way to display errors to the user of the current web part.
        /// </summary>
        /// <param name="message">Description of the error that occured.</param>
        public void RegisterError(string message)
        {
            if (this.Controls.Contains(_ErrorContainer))
            {
                //this way of generating a unique control id is used in some of the OOB web parts
                int uniqueCounter;
                if (HttpContext.Current.Items["GetUniqueControlId"] != null)
                {
                    uniqueCounter = (int)HttpContext.Current.Items["GetUniqueControlId"];
                }
                else
                {
                    uniqueCounter = 0;
                }
                uniqueCounter++;
                HttpContext.Current.Items["GetUniqueControlId"] = uniqueCounter;

                //create a custom validator to register the current error message with the ValidationSummary control
                CustomValidator cv = new CustomValidator();
                cv.ID = string.Concat("_Error_", uniqueCounter);
                cv.ValidationGroup = _ValidationGroupId;
                cv.Display = ValidatorDisplay.None;
                cv.IsValid = false;
                cv.ErrorMessage = message;

                this.Controls.Add(cv);
            }
            else
            {
                //if RegisterError is called before the CreateChildControls override in AjaxBasePart then transfer the user to an error page using the SPUtility
                SPUtility.TransferToErrorPage("The CreateChildControls function of the AjaxBasePart has not been called.  You probably need to add \"base.CreateChildControls()\" to the top of your CreateChildControls override.");
            }
        }
        /// <summary>
        /// Needs to be called to ensure that the ValidationSummary control is registered on the page.  Any child web parts will need to have base.CreateChildControls() at the top of their own CreateChildControls override.
        /// </summary>
        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            if (!this.Controls.Contains(_ErrorContainer))
            {
                _ValidationGroupId = Guid.NewGuid().ToString();

                _ErrorContainer = new ValidationSummary();
                _ErrorContainer.ID = "_ErrorContainer";
                _ErrorContainer.ValidationGroup = _ValidationGroupId;
                _ErrorContainer.BorderStyle = BorderStyle.Solid;
                _ErrorContainer.BorderWidth = Unit.Pixel(3);
                _ErrorContainer.BorderColor = Color.Red;

                this.Controls.Add(_ErrorContainer);
            }
        }
        #endregion

        #region Events
        /// <summary>
        /// Oninit fires before page load. Modifications to the page that are necessary to support Ajax are done here.
        /// </summary>
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            //get the existing ScriptManager if it exists on the page
            _AjaxManager = ScriptManager.GetCurrent(this.Page);

            if (_AjaxManager == null)
            {
                //create new ScriptManager and EnablePartialRendering
                _AjaxManager = new ScriptManager();
                _AjaxManager.EnablePartialRendering = true;

                // Fix problem with postbacks and form actions (DevDiv 55525)
                Page.ClientScript.RegisterStartupScript(typeof(AjaxBaseWebpart), this.ID, "_spOriginalFormAction = document.forms[0].action;", true);

                //tag:"form" att:"onsubmit" val:"return _spFormOnSubmitWrapper()" blocks async postbacks after the first one
                //not calling "_spFormOnSubmitWrapper()" breaks all postbacks
                //returning true all the time, somewhat defeats the purpose of the _spFormOnSubmitWrapper() which is to block repetitive postbacks, but it allows MS AJAX Extensions to work properly
                //its a hack that hopefully has minimal effect
                if (this.Page.Form != null)
                {
                    string formOnSubmitAtt = this.Page.Form.Attributes["onsubmit"];
                    if (!string.IsNullOrEmpty(formOnSubmitAtt) && formOnSubmitAtt == "return _spFormOnSubmitWrapper();")
                    {
                        this.Page.Form.Attributes["onsubmit"] = "_spFormOnSubmitWrapper();";
                    }

                    //add the ScriptManager as the first control in the Page.Form
                    //I don't think this actually matters, but I did it to be consistent with how you are supposed to place the ScriptManager when used declaritevly
                    this.Page.Form.Controls.AddAt(0, _AjaxManager);
                }
            }
        }
        #endregion

        #region Properties
        /// <summary>
        /// Exposes the Page's script manager. The value is not set until after OnInit
        /// </summary>
        [WebPartStorage(Storage.None)]
        public ScriptManager AjaxManager
        {
            get { return _AjaxManager; }
            set { _AjaxManager = value; }
        }
        #endregion
    }
开发时只要继承这个WebPart就可以添加UpdatePanel,并在里面添加其他控件了。

责任编辑:


相关文章
ASP.NET AJAX Beta2 调用本地WebService的一些改变
关天asp.net ajax beta中在updatepnael中注册脚本的解决方案
Ajax 框架ZK 2.2 发布
Ajax+GridView+Xml的简易留言薄
在虚拟主机上部署ASP.NET AJAX 1.0 Beta的程序集
一個Ajax.NET的查詢實例
用 PHPRPC 实现 Ajax 级联下拉菜单
Ajax & XMLHttpRequset
初步了解 ASP.NET AJAX 扩展
ASP.NET AJAX RC Tip:页面中无UpdatePanel时UpdateProgress创建出错问题
asp.net ajax 1.0,hello world程序
 

最新文章

更多

· XMLHttpRequest对象详解
· JQuery 使用手册(6-7) 事...
· JQuery 使用手册(4-5)
· JQuery 使用手册(3) CSS操作
· JQuery 使用手册(2) 二:...
· JQuery 使用手册(1)
· jQuery1.2选择器
· ASP.NET AJAX Beta2 调用...
· 在ASP.NET AJAX中别使用...
· asp简单的ajax留言板(采...

推荐文章

更多

· XMLHttpRequest对象详解
· JQuery 使用手册(6-7) 事...
· JQuery 使用手册(4-5)
· JQuery 使用手册(3) CSS操作
· JQuery 使用手册(2) 二:...
· JQuery 使用手册(1)
· jQuery1.2选择器
· ASP.NET AJAX Beta2 调用...
· 在ASP.NET AJAX中别使用...
· asp简单的ajax留言板(采...

热点文章

更多