实现WebPart编辑功能

    实现WebPart的编辑功能需要用到VS2005提供的EditorZone控件和EditorPart系列控件。EditorPart系列控件包括AppearanceEditorPart、BehaviorEditorPart、LayoutEditorPart、PropertyGridEditPart。
    要实现WebPart的编辑功能需要几个条件:(1)用户处于共享页面范围(2)显示模式为编辑模式。
    对于(1)来说,只要在Web.config文件中配置一下就OK了。 
    <allow users="Tom" verbs="enterSharedScope"/>  表示用户名"Tom" 被授权共享页面范围,否则切换成编辑模式会报错。


ContractedBlock.gif ExpandedBlockStart.gif Web.config
None.gif<?xml version="1.0"?>
None.gif
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
None.gif    
<appSettings/>
None.gif    
<connectionStrings/>
None.gif    
<system.web>
None.gif        
<compilation debug="true"/>
None.gif        
<authorization>
None.gif            
<deny users="?"></deny>
None.gif        
</authorization>
None.gif        
<authentication mode="Forms">
None.gif            
<forms loginUrl="Login.aspx"></forms>
None.gif        
</authentication>
None.gif        
<webParts>
None.gif            
<personalization>
None.gif                
<authorization>
None.gif                    
<allow users="Tom" verbs="enterSharedScope"/>
None.gif                
</authorization>
None.gif            
</personalization>
None.gif        
</webParts>
None.gif    
</system.web>
None.gif
</configuration>

    对于(2),在页面中添加2个LinkButton,在cs文件中切换一下显示模式,也可以用DropDownList来实现。
    EditorPart系列控件中的 BehaviorEditorPart、 PropertyGridEditPart需要特别说明一下。
    BehaviorEditorPart控件看名字也知道大概能做什么了,它在默认情况下可能不会显示出来,实现这个控件需要2个步骤:一、配置Web.config文件,方法上面已经说了,二、以编程的方式将页从用户级别改为共享级别,可以通过使用ToggleScope方法实现。
    PropertyGridEditPart:是对自定义属性的修改。

    在EditorPart中实现折叠的功能
    利用Css和JavaScript脚本来实现。初始情况下,让LEGEND的显示“+”号,并隐藏区块中的内容,通过Click“+”号改变Css。

    示例代码如下:
ContractedBlock.gif ExpandedBlockStart.gif Default.aspx
None.gif<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="_Default" %>
None.gif
None.gif
<%@ Register TagPrefix="cc1" Namespace="Samples.AspNet.CS.Controls" %>
None.gif
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
None.gif
<html>
None.gif
<head id="Head1" runat="server">
None.gif    
<link href="StyleSheet.css" rel="stylesheet" type="text/css" />
None.gif
None.gif    
<script type="text/javascript">
None.gif
//为每个className值为'EditorPartTitle'的标题头创建onclick处理程序
None.gif
function CreateExpandingTitles()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    var elements 
= document.getElementsByTagName("LEGEND");
InBlock.gif    
for(i=0; i<elements.length; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
if(elements[i].className && elements[i].className == "EditorPartTitle")
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            elements[i].onclick 
= new Function("toggle(this);");
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
// 在onload发生时,调用CreateExpandingTitles方法
None.gif
if(window.addEventListener)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    window.addEventListener(
'load', CreateExpandingTitles, false);
ExpandedBlockEnd.gif}

None.gif
else if (window.attachEvent)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    window.attachEvent(
'onload', CreateExpandingTitles);
ExpandedBlockEnd.gif}

None.gif
//单击事件处理程序
None.gif
function toggle(titleElement)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    var firstChild 
= (titleElement.nextSibling.childNodes[0].id)
InBlock.gif      
? titleElement.nextSibling.childNodes[0
InBlock.gif      : titleElement.nextSibling.childNodes[
1];
InBlock.gif
InBlock.gif    
// 设置图片显示及显示状态
InBlock.gif
    if (firstChild.style.display == "block")
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        firstChild.style.display 
= "none";
InBlock.gif        titleElement.style.backgroundImage 
= "url(images/plus.gif)";
ExpandedSubBlockEnd.gif    }
 
InBlock.gif    
else
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        firstChild.style.display 
= "block";
InBlock.gif        titleElement.style.backgroundImage 
= "url(images/minus.gif)";
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif    
</script>
None.gif
None.gif
</head>
None.gif
<body>
None.gif    
<form id="Form1" runat="server">
None.gif        
<asp:WebPartManager ID="WebPartManager1" runat="server" />
None.gif        
<asp:LinkButton ID="LinkButton1" runat="server" Text="浏览模式(BrowseMode) | " OnClick="LinkButton1_Click"
None.gif            CssClass
="commonText"></asp:LinkButton>
None.gif        
<asp:LinkButton ID="LinkButton2" runat="server" Text="编辑模式(EditMode)" OnClick="LinkButton2_Click"
None.gif            CssClass
="commonText"></asp:LinkButton>&nbsp;
None.gif        
<table border="0" cellpadding="0" cellspacing="0" style="width: 547px; height: 172px">
None.gif            
<tr>
None.gif                
<td style="width: 268px" valign="top">
None.gif                    
<asp:WebPartZone ID="WebPartZone1" runat="server" title="Zone 1" BorderColor="#CCCCCC"
None.gif                        Font
-Names="Verdana" Padding="6">
None.gif                        
<PartTitleStyle Font-Bold="true" ForeColor="White" BackColor="#5D7B9D" Font-Size="0.8em" />
None.gif                        
<PartStyle BorderWidth="1px" BorderStyle="Solid" BorderColor="#81AAF2" Font-Size="0.8em"
None.gif                            ForeColor
="#333333" />
None.gif                        
<ZoneTemplate>
None.gif                            
<cc1:TextDisplayWebPart runat="server" ID="textwebpart" Title="Text Content WebPart"
None.gif                                AllowClose
="False" />
None.gif                        
</ZoneTemplate>
None.gif                        
<PartChromeStyle BackColor="#F7F6F3" BorderColor="#E2DED6" Font-Names="Verdana" ForeColor="White" />
None.gif                        
<MenuLabelHoverStyle ForeColor="#E2DED6" />
None.gif                        
<EmptyZoneTextStyle Font-Size="0.8em" />
None.gif                        
<MenuLabelStyle ForeColor="White" />
None.gif                        
<MenuVerbHoverStyle BackColor="#F7F6F3" BorderColor="#CCCCCC" BorderStyle="Solid"
None.gif                            BorderWidth
="1px" ForeColor="#333333" />
None.gif                        
<HeaderStyle Font-Size="0.7em" ForeColor="#CCCCCC" HorizontalAlign="Center" />
None.gif                        
<MenuVerbStyle BorderColor="#5D7B9D" BorderStyle="Solid" BorderWidth="1px" ForeColor="White" />
None.gif                        
<TitleBarVerbStyle Font-Size="0.6em" Font-Underline="False" ForeColor="White" />
None.gif                        
<MenuPopupStyle BackColor="#5D7B9D" BorderColor="#CCCCCC" BorderWidth="1px" Font-Names="Verdana"
None.gif                            Font
-Size="0.6em" />
None.gif                    
</asp:WebPartZone>
None.gif                
</td>
None.gif                
<td style="width: 204px">
None.gif                    
<asp:EditorZone ID="EditorZone1" runat="server" BackColor="#EFF3FB" BorderColor="#CCCCCC"
None.gif                        BorderWidth
="1px" Font-Names="Verdana" Padding="6">
None.gif                        
<HeaderStyle BackColor="#D1DDF1" Font-Bold="True" Font-Size="0.8em" ForeColor="#333333" />
None.gif                        
<LabelStyle Font-Size="0.8em" ForeColor="#333333" />
None.gif                        
<HeaderVerbStyle Font-Bold="False" Font-Size="0.8em" Font-Underline="False" ForeColor="#333333" />
None.gif                        
<PartChromeStyle BorderColor="#D1DDF1" BorderStyle="Solid" BorderWidth="1px" />
None.gif                        
<ZoneTemplate>
None.gif                            
<asp:AppearanceEditorPart ID="AppearanceEditorPart1" runat="server" CssClass="EditorPartHidden" />
None.gif                            
<asp:BehaviorEditorPart ID="BehaviorEditorPart1" runat="server" CssClass="EditorPartHidden" />
None.gif                            
<asp:LayoutEditorPart ID="LayoutEditorPart1" runat="server" CssClass="EditorPartHidden" />
None.gif                            
<asp:PropertyGridEditorPart ID="PropertyGridEditorPart1" runat="server" CssClass="EditorPartHidden" />
None.gif                        
</ZoneTemplate>
None.gif                        
<PartStyle BorderColor="#EFF3FB" BorderWidth="5px" />
None.gif                        
<FooterStyle BackColor="#D1DDF1" HorizontalAlign="Right" />
None.gif                        
<EditUIStyle Font-Names="Verdana" Font-Size="0.8em" ForeColor="#333333" />
None.gif                        
<InstructionTextStyle Font-Size="0.8em" ForeColor="#333333" />
None.gif                        
<ErrorStyle Font-Size="0.8em" />
None.gif                        
<VerbStyle Font-Names="Verdana" Font-Size="0.8em" ForeColor="#333333" />
None.gif                        
<EmptyZoneTextStyle Font-Size="0.8em" ForeColor="#333333" />
None.gif                        
<PartTitleStyle Font-Bold="True" Font-Size="0.8em" ForeColor="#333333" CssClass="EditorPartTitle" />
None.gif                    
</asp:EditorZone>
None.gif                
</td>
None.gif            
</tr>
None.gif        
</table>
None.gif    
</form>
None.gif
</body>
None.gif
</html>

ContractedBlock.gif ExpandedBlockStart.gif Default.aspx.cs
None.gifusing System;
None.gif
using System.Data;
None.gif
using System.Configuration;
None.gif
using System.Web;
None.gif
using System.Web.Security;
None.gif
using System.Web.UI;
None.gif
using System.Web.UI.WebControls;
None.gif
using System.Web.UI.WebControls.WebParts;
None.gif
using System.Web.UI.HtmlControls;
None.gif
None.gif
public partial class _Default : System.Web.UI.Page 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
protected void Page_Load(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif
ExpandedSubBlockEnd.gif    }

InBlock.gif    
protected void LinkButton1_Click(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
//进入浏览模式
InBlock.gif
        WebPartManager1.DisplayMode = WebPartManager.BrowseDisplayMode;
ExpandedSubBlockEnd.gif    }

InBlock.gif    
protected void LinkButton2_Click(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
//调用ToogleScope方法,修改页面个性化范围
InBlock.gif
        if (WebPartManager1.Personalization.Scope != PersonalizationScope.Shared)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            WebPartManager1.Personalization.ToggleScope();
ExpandedSubBlockEnd.gif        }

InBlock.gif        
//进入编辑模式
InBlock.gif
        WebPartManager1.DisplayMode = WebPartManager.EditDisplayMode;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

ContractedBlock.gif ExpandedBlockStart.gif StyleSheet.css
None.gifbody
ExpandedBlockStart.gifContractedBlock.gif
{dot.gif}{
ExpandedBlockEnd.gif
}

None.gif.mainTitle
ExpandedBlockStart.gifContractedBlock.gif
{dot.gif}{
InBlock.gif    font-size
: 12pt;
InBlock.gif    font-weight
: bold;
InBlock.gif    font-family
: 宋体;
ExpandedBlockEnd.gif
}

None.gif.commonText
ExpandedBlockStart.gifContractedBlock.gif
{dot.gif}{
InBlock.gif    font-size
: 10pt;
InBlock.gif    font-family
: 宋体;
InBlock.gif    text-decoration
:none;
ExpandedBlockEnd.gif
}

None.gif.littleMainTitle
ExpandedBlockStart.gifContractedBlock.gif
{dot.gif}{
InBlock.gif    font-size
: 10pt;
InBlock.gif    font-weight
: bold;
InBlock.gif    font-family
: 宋体;
ExpandedBlockEnd.gif
}

None.gif.EditorPartHidden
ExpandedBlockStart.gifContractedBlock.gif
{dot.gif}{
InBlock.gif    display
: none;
ExpandedBlockEnd.gif
}

None.gif
None.gif.EditorPartTitle
ExpandedBlockStart.gifContractedBlock.gif
{dot.gif}{    
InBlock.gif    background-position
: left;
InBlock.gif    background-repeat
: no-repeat;
InBlock.gif    background-image
: url(images/plus.gif);
InBlock.gif    cursor
: pointer;
InBlock.gif    padding-left
: 14px;        
ExpandedBlockEnd.gif
}

    效果图:

有2个问题:(1)点编辑模式需要点2次才有反映(2)IE老是莫名其妙的发生错误,让你发送错误报告。

转载于:https://www.cnblogs.com/hide0511/archive/2006/11/04/550355.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值