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

[经验分享] 自定义SharePoint列表新增、编辑、查看页面(NewForm、EditForm、DispForm)

[复制链接]
发表于 2015-9-25 09:11:10 | 显示全部楼层 |阅读模式
  
  在项目中,用户需求涉及在一个列表录入项目信息,选择一个项目后,与该项目相关的信息实现自动填写,这个需求在SharePoint列表里,我们只能通过重新定制SharePoint列表的新建、编辑页面来实现。
  SharePoint的新建(NewForm.aspx)、编辑(EditForm.aspx)、查看(DispForm.aspx)页面都是存在数据库中,每个页面中都部署了一个SharePoint自己的ListFormWebPart,如下图:
   DSC0000.gif
  
  上图是使用SharePointDesigner打开列表编辑页面的效果,由于在SharePoint网站中,列表的新建、编辑、查看页是没有“编辑页面”的选项,所以使用Designer来编辑页面,并可以向页面添加自己的WebPart用来实现数据的输入、保存等。
  接下来开始定制新建页面:
  1、 首先使用designer打开列表的NewForm.aspx页面,如下图:
  
   DSC0001.gif
  
  
  2、 接着插入一个自己定义的TemplateWebPart(此WebPart用来载入用户控件ascx页面),如下图:
  
   DSC0002.gif
  
  接着配置TemplateWebPart的UserControl路径,例如:/_layouts/MyPages/NewPage.ascx
  
  3、 现在再次打开列表的新建页面就可以看到下图的效果
  
   DSC0003.gif
  
  
  4、 接下来要做的就是把SharePoint自己的新建页面给隐藏起来,使用我们自己定义的WebPart来进行数据的录入,这样新建页面就能自己说了算了。
  隐藏SharePoint自己的ListFormWebPart有两种方式:
  1) 在Designer中双击ListFormWebPart,选中其“布局”属性中的“隐藏”选项。
  
  这种方法有个缺陷,就是无法使用SharePoint自己的“附加文件”来上传附件。应为虽然是将ListFormWebPart隐藏不显示,但实际它的代码在IE浏览时还是会存在网页中。这时候点击“附加文件”链接,它的脚本就会出现错误。如果你的新建页面不用上传附件的话,这种方式还是比较方便省事的。
2) 重新定义一个空的SharePoint:RenderingTemplate,打开12"template"controltemplates"DefaultTemplates.ascx文件,在文件最后加入如下代码:



1 <SharePoint:RenderingTemplate ID="CustomerListForm" runat="server">
2     <Template>
3     </Template>
4 </SharePoint:RenderingTemplate>
5

用Designer打开新建页面,切换到代码视图,编辑ListFormWebPart的TemplateName属性,将TemplateName的值设置成自定义的模板&#8220;CustomerListForm&#8221;如下图:


DSC0004.gif


保存后,实际现在新建页面的ListFormWebPart就是个摆设了,里面没有任何内容,有人会觉得那就把它删了就行了,我开始也是这么想的直接删了,结果在列表点击&#8220;新建&#8221;链接时,页面弹出新建页面链接无效,无法进入新建页面了。所以只能采取所谓&#8220;隐藏&#8221;的方法来做了,如果有其他方法还请大家帮忙指出,小弟在此先谢过了:)。


  最后自定义列表新建页面就跟做.net页面一样了,想怎么弄都行了。编辑、查看的页面基本和这个相同。
  TemplateWebPart代码:

DSC0005.gif DSC0006.gif TemplateWebPart
1 DSC0007.gif using System;
2using System.Collections.Generic;
3using System.Web;
4using System.Web.UI;
5using System.ComponentModel;
6using System.Web.UI.HtmlControls;
7using System.Web.UI.WebControls;
8using System.Web.UI.WebControls.WebParts;
9using Microsoft.SharePoint;
10using Microsoft.SharePoint.WebControls;
11using Microsoft.SharePoint.WebPartPages;
12using System.Xml.Serialization;
13
14namespace ITSCustomMgr.WebParts
15 DSC0008.gif {
16    [XmlRoot(Namespace = "ITSCustomMgr.WebParts")]
17    public class TemplateWebPart : System.Web.UI.WebControls.WebParts.WebPart
18    {
19        private const string defaultText = "";
20        private string _userControl;
21        private UserControl _control;
22        private LiteralControl _child;
23
24        [WebBrowsable, Category("用户控件包装器设置"),
25        DefaultValue(defaultText),
26        Personalizable(),
27        FriendlyName("用户控件路径"), Description("请输入用户控件路径 (.ascx)")]
28        public string UserControl
29        {
30            get { return _userControl; }
31            set { _userControl = value; }
32        }
33
34        protected internal void LoadUserControl()
35        {
36            if (!string.IsNullOrEmpty(this._userControl))
37            {
38                this._control = (UserControl)Page.LoadControl(this._userControl);
39                this.Controls.Add(this._control);
40            }
41            else
42            {
43                this._child = new LiteralControl(string.Format("Web 部件未绑定用户控件。请设置用户控件的 URL。例如&#8220;~/_CONTROLTEMPLATES/Welcome.ascx&#8221;)", 1, 129, this.ID));
44                this.Controls.Add(this._child);
45            }
46        }
47
48        protected override void CreateChildControls()
49        {
50            base.CreateChildControls();
51            this.Controls.Clear();
52            try
53            {
54                LoadUserControl();
55            }
56            catch (System.Exception ex)
57            {
58                this._child = new LiteralControl(string.Format("<b>错误:</b> 不能载入 {0}<br /><b>详细信息:</b> {1}", _userControl, ex.Message));
59                this.Controls.Add(this._child);
60            }
61        }
62
63        protected override void Render(HtmlTextWriter writer)
64        {
65            EnsureChildControls();
66            if (_control != null)
67            {
68                _control.RenderControl(writer);
69            }
70            else
71            {
72                _child.RenderControl(writer);
73            }
74        }
75    }
76}  
  基本上自定义SharePoint列表新建页面就先介绍到这,过几天再来补充如何在新建、编辑页面中使用SharePoint的AttachmentUpload来实现上传附件。
  
  

运维网声明 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-118466-1-1.html 上篇帖子: Windows SharePoint Services 3.0 应用程序模板中文版(图解) 下篇帖子: 修复 SharePoint HRESULT:0x80070094 问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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