当前位置: 代码迷 >> Web前端 >> 基于UserControl方式快速创建Web Part
  详细解决方案

基于UserControl方式快速创建Web Part

热度:608   发布时间:2012-07-08 17:43:44.0
基于UserControl模式快速创建Web Part

基于UserControl模式快速创建Web Part
2011年03月10日
  在《创建自己的Webpart 》一文中,已经介绍过创建Web Part的步骤,以及如何部署Web Part。但是,如果深入就会发现,创建一个复杂的Web Part其实是很麻烦的事情。尤其是在该模式下,Web Part的子控件或者内容都是依靠重载CreateChildControls或者RenderWebPart方法来进行输出。而WSS/OSS开发的一个很重要的方面就是对Web Part的开发。而根据目前流行的开发模式,就是前后台分离,这样的Web Part 开发不利于分工。尤其Web开发注重的界面,很难实现代码人员与美工人员的协同。采用基于UserControl的方式来创建Web Part不失为一个好的办法。
  一、创建用户控件
  在Visual Studio 2005(VS 2005)IDE环境中,文件-》新建-》网站-》空网站,在【位置】处选择【文件系统】方式,然后确定即可。就自动生成一个解决方案和一个空白的Web项目。
  在空白项目上右键,【添加新项】,选择【Web 用户控件】。在Independent.ascx页面文件中,代码如下:
  
  
  
  在文件Independent.ascx.cs中,代码如下:
  using System;
  using System.Data;
  using System.Configuration;
  using System.Collections;
  using System.Web;
  using System.Web.Security;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.UI.WebControls.WebParts;
  using System.Web.UI.HtmlControls;
  public partial class Independent : System.Web.UI.UserControl
  {
  protected void Button1_Click(object sender, EventArgs e)
  {
  //显示文本框内容
  ShowMessage(Page, this.TextBox1.Text);
  }
  public static void ShowMessage(System.Web.UI.Page page, string strMessage)
  {
  strMessage = strMessage.Replace(@"\", @"\\");
  strMessage = strMessage.Replace("\r\n", "\\r\\n");
  page.Response.Write("\r");
  page.Response.Write("alert(\"" + strMessage + "\");\r");
  page.Response.Write("\r");
  }
  }
  二、创建Web Part壳
  有了用户控件,这个用户控件与普通的用户控件一摸一样,没有做任何改变。我们如何使用它,使其成为一个可用的Web Part的一部分,我们需要为其创建一个Web Part的"壳"。为什么叫"壳",看完后面的介绍,也就不言自明了。
  在现有的解决方案中,文件-》新建-》项目-》类库,按照在《创建自己的Webpart 》中的步骤,创建一个Web Part。代码如下:
  #region 示例:动态加载UserControl
  ///
  /// 示例4:动态加载UserControl
  ///
  public class UserControlShell : WebPart
  {
  private string _UserControlSource = @"/_app_bin/UserControls/Independent.ascx";
  [WebBrowsable(true), Personalizable(true)]
  public string ControlSource
  {
  get { return _UserControlSource; }
  set { _UserControlSource = value; }
  }
  protected override void CreateChildControls()
  {
  base.CreateChildControls();
  if (_UserControlSource == null || _UserControlSource.Length == 0) return;
  this.Controls.Clear();
  try
  {
  //这个位置是虚拟路径
  this.Controls.Add(Page.LoadControl(_UserControlSource));
  }
  catch (Exception ex)
  {
  Page.Response.Write(ex.Message);
  }
  }
  protected override void Render(HtmlTextWriter writer)
  {
  base.Render(writer);
  }
  }
  #endregion
  三、部署Web Part和用户控件
  部署的方式在《创建自己的Webpart 》中也作了介绍。将编译好的Web Part的DLL文件拷贝到_app_bin目录下,然后修改Web Application下的Web.config文件,将Web Part注册为安全的控件。下面是我的注册码:
  
  在部署完成后,如何使用用户控件呢?还需要将用户控件也拷贝的Web Application所指的主目录下的相应位置。这个位置可以打开IIS.MSC来查看。
  根据示例中的代码,我们在_app_bin目录下新建文件夹UserControls,然后找到刚才创建的用户控件文件Independent.ascx和Independent.ascx.cs拷贝到UserControls文件夹下。当然,这个位置可以是[system drive\]Inetpub\wwwroot\wss\VirtualDirectories\80下的任何位置,可以通过在Web Part的ControlSource属性来设置用户控件的来源。
  四、测试用户控件
  将Web Part加入到Web 部件库,并添加到页面上。在TextBox中输入"Hello World",点击按钮试验一下。不错,对话框出现。嘿嘿:)
  五、扩展用户控件功能
  至此,我们已经知道为什么刚才那个Web Part要叫作"壳"或者"Shell"了。因为,我们的主要工作都交给用户控件去做了,刚才那个Web Part的功能仅仅是去Load一下用户控件,别的什么事也不做。
  1.创建类文件
  现在,这个用户控件还比较简单,我们稍微将其实用化一下。在用户控件项目上右键,【添加新项】,选择【类】。按系统默认,将新建的类文件放在App_Code目录下。然后再在这个项目中添加对Microsoft.SharePoint.dll的引用。在类文件中添加如下代码:
  using System;
  using System.Data;
  using System.Configuration;
  using System.Web;
  using System.Web.Security;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.UI.WebControls.WebParts;
  using System.Web.UI.HtmlControls;
  using Microsoft.SharePoint;
  using Microsoft.SharePoint.WebControls;
  using Microsoft.SharePoint.Utilities;
  namespace VeryTech.WebParts
  {
  ///
  /// SPWebHelper 的摘要说明
  ///
  public class SPWebHelper
  {
  public SPWebHelper()
  {
  //
  // TODO: 在此处添加构造函数逻辑
  //
  }
  public int Add(int a, int b)
  {
  return a + b;
  }
  public string GetList(HttpContext Context)
  {
  SPSite site = SPControl.GetContextSite(Context);
  string rtn = string.Empty;
  SPListItemCollection listItems = site.AllWebs[0].Lists["共享文档"].Items;
  foreach (SPListItem list in listItems)
  {
  rtn += list.Name + ";";
  }
  return rtn;
  }
  }
  }
  2.修改用户控件
  修改用户控件的代码文件Independent.ascx.cs的内容如下:
  添加引用:
  using VeryTech.WebParts;
  修改代码:
  protected void Button1_Click(object sender, EventArgs e)
  {
  string rtn = string.Empty;
  try
  {
  rtn = new SPWebHelper().GetList(Context);
  }
  catch(Exception exc)
  {
  rtn = exc.Message;
  }
  this.TextBox1.Text = rtn;
  }
  3.部署类文件
  在做完这些之后,将用户控件文件按照之前的步骤更新到相应的位置。但是我们该把那个类文件放在哪儿呢?如果你放到与用户控件相同位置下,保管你不会成功。考虑到Asp 2.0的编译模式,在网站(WSS的Web应用)的主目录下,建立App_Code目录,将该类文件放在这个位置。测试,大功告成。在TextBox文本框中得到了共享文档的文件名。
  结束: 从这个过程可以看出,这种Web Part开发模式基本实现了分层的模式。用户控件的展现层,也就是ascx文件由美工去负责,页面上的内容数据源,也就是用户控件的cs文件的内容由编程人员完成。而编码这部分,也还可以进行分工(就是后面的专用类可以有人专门负责)。这样一来,分工就比较明晰了。同时,也提高了开发效率。还有一个优点就是调试也比较方便,尤其是对界面的调试(随便将用户控件拖到一个页面上就可以了)。
  相关解决方案