设为首页 收藏本站
查看: 941|回复: 0

[经验分享] sharepoint 2010 重写SaveButton 的一些方法

[复制链接]

尚未签到

发表于 2015-9-29 08:32:48 | 显示全部楼层 |阅读模式
  sharepoint2007重写SaveButton的方法已经有了,2010只要改几个地方就可以了
  using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Microsoft.SharePoint;
using System.Web.UI.WebControls;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.Utilities;
using System.Globalization;
using System.Collections;
using System.Web;
  namespace ***.***.***.WebControls
{
    public class BeforeSaveItemArgs : EventArgs
    {
        public bool CanRedirect { get; set; }
        public SPListItem ListItem { get; set; }
        public bool Cancel { get; set; }
    }
  public class AfterSaveItemArgs : EventArgs
    {
        public SPListItem ListItem { get; set; }
        public bool Success { get; set; }
    }
  public delegate void BeforeSaveItemHandler(object sender, BeforeSaveItemArgs e);
    public delegate void AfterSaveItemHandler(object sender, AfterSaveItemArgs e);
  public class UpdateButton : Microsoft.SharePoint.WebControls.SaveButton//FormComponent  
    {
        private SPContentType m_ct;
        private SPContentType m_oldCt;
        private bool _canRedirect = true;
        private static readonly object EventBeforeSaveItem = new object();
        private static readonly object EventAfterSaveItem = new object();
  public event BeforeSaveItemHandler OnBeforeSaveItem
        {
            add
            {
                base.Events.AddHandler(EventBeforeSaveItem, value);
            }
            remove
            {
                base.Events.RemoveHandler(EventBeforeSaveItem, value);
            }
        }
  public event AfterSaveItemHandler OnAfterSaveItem
        {
            add
            {
                base.Events.AddHandler(EventAfterSaveItem, value);
            }
            remove
            {
                base.Events.RemoveHandler(EventAfterSaveItem, value);
            }
        }
  protected virtual void DoBeforeSaveItem(BeforeSaveItemArgs e)
        {
            BeforeSaveItemHandler handler = (BeforeSaveItemHandler)base.Events[EventBeforeSaveItem];
            if (handler != null)
            {
                handler(this, e);
  _canRedirect = e.CanRedirect;
            }
        }
  protected virtual void DoAfterSaveItem(AfterSaveItemArgs e)
        {
            AfterSaveItemHandler handler = (AfterSaveItemHandler)base.Events[EventAfterSaveItem];
            if (handler != null)
            {
                handler(this, e);
            }
        }
        protected override void CreateChildControls()
        {
            base.CreateChildControls();
        }
  
        protected override bool SaveItem()
        {
  SPListItem item = base.ItemContext.ListItem;
  BeforeSaveItemArgs beforeSaveArgs =
                new BeforeSaveItemArgs() { ListItem = item, Cancel = false, CanRedirect = false };
  DoBeforeSaveItem(beforeSaveArgs);
  if (!beforeSaveArgs.Cancel)
            {
                bool result = base.SaveItem();
  AfterSaveItemArgs afterSaveArgs = new AfterSaveItemArgs()
                {
                    ListItem = item,
                    Success = result
                };
                DoAfterSaveItem(afterSaveArgs);
                return result;
            }
            else
                return false;
        }
  
        public bool CanRedirect
        {
            get { return _canRedirect; }
            set { _canRedirect = value; }
        }
  public bool Update()
        {
  bool flag = false;
  this.Page.Validate();
            if (this.Page.IsValid)
            {
                try
                {
                    flag = SaveItem();
  }
                catch (Exception ex)
                {
                    throw new SPException(ex.Message, ex);
                }
  string redirectUrl = base.RedirectUrl;
  this.Context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");
  this.Context.Response.Flush();
                this.Context.Response.End();
            }
            return flag;
        }
  #region internal method
        private static IFormatProvider s_ifp;
  internal static IFormatProvider FormatProvider
        {
            get
            {
                if (s_ifp == null)
                {
                    StringWriter writer = new StringWriter(
                        System.Globalization.CultureInfo.InvariantCulture);
                    s_ifp = writer.FormatProvider;
                }
                return s_ifp;
            }
        }
  
        internal SPContentType GetContentTypeThroughQueryString()
        {
            string str = this.Page.Request.QueryString["ContentTypeId"];
            if (str != null)
            {
                SPContentType type2;
                try
                {
                    if (str.StartsWith("0x"))
                    {
                        SPContentTypeId contentTypeId = new SPContentTypeId(str);
                        SPContentType type = this.List.ContentTypes[contentTypeId];
                        if (type == null)
                        {
                            return this.List.ContentTypes[this.List.ContentTypes.BestMatch(contentTypeId)];
                        }
                        return type;
                    }
                    int num = int.Parse(str, UpdateButton.FormatProvider);
                    type2 = this.List.ContentTypes[num];
                }
                catch (ArgumentException)
                {
                    return null;
                }
                catch (SPException)
                {
                    return null;
                }
                return type2;
            }
            return null;
        }
  internal SPContentType ContentType
        {
            get
            {
                if (this.m_ct == null)
                {
                    if (this.Item is SPListItem)
                    {
                        if (this.ItemContext.FormContext.FormMode != SPControlMode.Display)
                        {
                            this.m_ct = this.GetContentTypeThroughQueryString();
                            if (this.m_ct == null)
                            {
                                if (this.ItemContext.FormContext.FormMode != SPControlMode.Edit)
                                {
                                    foreach (SPContentType type in this.List.ContentTypes)
                                    {
                                        if (!(type.Id.Parent == SPBuiltInContentTypeId.Folder))
                                        {
                                            this.m_ct = type;
                                            break;
                                        }
                                    }
                                }
                                else
                                    this.m_ct = this.OldContentType;
                            }
                        }
                        else
                        {
                            this.m_ct = this.OldContentType;
                        }
                    }
  ///00D2////
                    if ((this.m_ct == null) && (this.List.ContentTypes.Count > 0))
                    {
                        this.m_ct = this.List.ContentTypes[0];
                    }
                }
                return this.m_ct;
            }
        }
  internal bool IsCurrentItemVersion
        {
            get
            {
                if (this.ItemVersion != null)
                    return (this.ItemVersion.VersionId == 0) ||
                        (((int)this.ListItem["_UIVersion"]) == this.ItemVersion.VersionId);
                else
                    return (int)(this.ListItem["_UIVersion"]) == 0;
            }
        }
  internal SPListItemVersion ItemVersion
        {
            get { return this.ItemContext.ListItemVersion; }
        }
  
        private SPContentType OldContentType
        {
            get
            {
                if (this.m_oldCt == null)
                {
                    if ((this.ItemContext.FormContext.FormMode != SPControlMode.Edit)
                        && (this.ItemContext.FormContext.FormMode != SPControlMode.Display))
                    {
                        return null;
                    }
                    if (this.Item is SPListItem)
                    {
                        object obj2 = null;
                        try
                        {
                            obj2 = this.ListItem["ContentTypeId"];
  //if (!this.IsCurrentItemVersion)
                            //{
                            //    obj2 = this.ItemContext.ListItemVersion["ContentTypeId"];
                            //}
                            //else
                            //{
                            //    obj2 = this.ListItem["ContentTypeId"];
                            //}
                        }
                        catch (ArgumentException)
                        {
                        }
                        if (obj2 != null)
                        {
                            SPContentTypeId id = (SPContentTypeId)obj2;
                            this.m_oldCt = this.List.ContentTypes[id];
                        }
                    }
                }
                else
                {
                    return this.m_oldCt;
                }
                return this.m_oldCt;
            }
        }
        #endregion
    }
    public class SaveButton : UpdateButton
    {
        protected override bool OnBubbleEvent(object source, EventArgs e)
        {
            bool flag = false;
            if (e is CommandEventArgs)
            {
                CommandEventArgs args = e as CommandEventArgs;
                if (args.CommandName == "SaveItem")
                {
                    flag = this.Update();
                    return flag;
                }
            }
            return flag;
        }
    }
}
  但保存前对一些特殊字段校验怎么办呢?因为这个savebutton只能回到新建的页面,那么填写的都白填写了,本来想在代码里面控制一下的(就是那个写Cancel的原因)但发现没什么用。
  最后用什么搞定了呢?用了一个CustomValidator就可以了。
  <asp:CustomValidator ID="CustomValidator1" runat="server"
        ControlToValidate="" EnableClientScript="False"
        ErrorMessage="输入有错误"
        onservervalidate="CustomValidator1_ServerValidate"></asp:CustomValidator>
  
  protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
        {
          if (Convert.ToDateTime(FormField15.Value)>System.DateTime.Now)
            {
  args.IsValid = false;
            }
        }
  这样这个savebutton在保存前,保存后就都好用了。,先这么写,后面写详细点。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-120194-1-1.html 上篇帖子: SharePoint中的EventReceiver 之二 绑定Event Receiver到列表类型或列表实例 下篇帖子: zz: SharePoint 2007 Folders from Eric Cherng
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表