技术开发 频道

重写表单的保存逻辑


【IT168技术文档】

  通过上一篇文章WSS页面定制系列(2)---定制单个列表的表单页面您应该了解到了如何定制列表那些查看,新增,修改的页面。但是只限于页面布局。
  如果需要修改保存逻辑应该怎么做呢?
  这个需求还是很常见的,比如,保存之前做一些校验,保存之后重定向到某个页面。
  系统模板里面负责保存操作的是如下的控件:
<SharePoint:SaveButton runat="server"/>
  这个控件位于Microsoft.SharePoint.WebControls名称控件。我们用reflector找到关键代码:
SharePointPermission(SecurityAction.Demand, ObjectModel=true)] protected override bool OnBubbleEvent(object source, EventArgs e) { SPListItem listItem; string redirectUrl; bool flag = false; if (e is CommandEventArgs) { CommandEventArgs args = (CommandEventArgs) e; if (!(args.CommandName == "SaveItem")) { return flag; } listItem = base.ItemContext.ListItem; if ((listItem != null) && (base.ItemContext.ContentType != null)) { try { listItem["ContentType"] = base.ItemContext.ContentType.Name; listItem.SetExtraInfo("ContentTypeId", base.ItemContext.ContentType.Id.ToString(), ""); } catch (ArgumentException) { } } } else { return flag; } this.Page.Validate(); if (this.Page.IsValid) { bool flag2 = false; EventHandler onSaveHandler = base.ItemContext.FormContext.OnSaveHandler; if (onSaveHandler == null) { if (base.List.BaseTemplate != SPListTemplateType.Survey) { flag2 = this.SaveItem(); } else if (base.ItemContext.FormContext.NextFieldName != null) { if (base.ControlMode != SPControlMode.New) { flag2 = this.SaveItem(); } else { listItem.Checkout(); flag2 = true; } } else { listItem.Checkin(); flag2 = true; } } else { onSaveHandler(this, EventArgs.Empty); flag2 = true; } flag = true; if (!flag2) { return flag; } redirectUrl = base.RedirectUrl; if (((base.ItemContext.List.BaseTemplate == SPListTemplateType.Events) || ((base.ItemContext.ContentType != null) && base.ItemContext.ContentType.Id.IsChildOf(SPBuiltInContentTypeId.Event))) && base.ItemContext.FormContext.WantRedirectForMWS) { if ((base.ItemContext.FormContext.FormMode == SPControlMode.New) && base.ItemContext.FormContext.NeedIDForNewMWS) { redirectUrl = redirectUrl + "&Item=" + base.ItemContext.ListItem.ID.ToString(CultureInfo.InvariantCulture); } SPUtility.Redirect(redirectUrl, SPRedirectFlags.Default, this.Context); return flag; } } else { return true; } if (base.ItemContext.List.BaseTemplate == SPListTemplateType.WebPageLibrary) { redirectUrl = ((SPListItem) base.Item).File.ServerRelativeUrl; } SPUtility.Redirect(redirectUrl, SPRedirectFlags.UseSource, this.Context); return flag; }
0
相关文章