??xml version="1.0" encoding="utf-8" standalone="yes"?>
首先我们知道Q属性都是保存在WebPart中,所以我们需要在WebPart中徏立相应属性来保存此|如下Q?/font>
然后我们需要在ToolPart中画出我们需要的文本框了。画个ToolPart的方法大安很熟悉了Q就是RenderToolPart代码如下Q?/font>
string inputname = null;
然后通过构造函数捕捉初始化事gQ?/font>
q是呈现Q那么如何在用户填写了以后保存v来这个值呢Q也即保存到我们WebPart中那个隐藏的Text属性中。这p通过ToolPartcM的ApplyChanges()ҎQ这是点M定认了修改的时候执行的Ҏ。代码如下:
q种自定义属性有什么好处呢Q在于你可以控制ToolPart的输出,比如你可以做一些特D的控g让用h便的输入属性等。或者你可以更改文本框的背景色或者前景色Q也即你自己控制的力度加大了?/font>
摘自h工作室(
http://sps.oceanstudio.net
Q?
某个客户需要做一个搜? 得到文档的信?br />q个文档库可能是带权限的, 需要在昄l果的时候判断当前用户在q个文档库上是否有权?br />
而这个文档库可能攑֜一个wss|站?br />只允怸个部门的入这个网? 但是该文档库可以l其他部门的人加权限以便查看其中的文?br />
以下是用对象模型的方法判断文档库上的权限:
一般来说首先想到的Ҏ肯定是这L:
SPSite site = new SPSite("
http://mysite_url
"); // Line 1
SPWeb web = site.OpenWeb(); // Line 2
SPListCollection lists = web.Lists; // Line 3
SPList list = lists["MyDocLib"]; // Line 4
bool perm = list.Permissions.DoesUserHavePermission(SPRights.xxxx);
但是, 对于上面提到的那U情? q种Ҏ是有问题?br />问题一:
该用户如果不是该|站成员的话, 上面的做法得不到|站
其表现就是webpart所在页面会反复弹出用户名密码框......即你做了try-catch也没? 截不下这个异?br />问题?
该用户不是该|站成员, 默认情况下不允许使用web.Lists[]q种Ҏ, 会有异常
对于W一个问题解军_? 插入一行代?
site.CatchAccessDeniedException = false; // Line 1.5
q个属性就像其名字一? ? 不罗嗦了, 是可以拿到那个SPWeb对象?br />
对于W二个问? 插入一行代?
lists.ListsForCurrentUser = true; // Line 3.5
q样再用web.Lists[]p得到SPList对象, 然后再判权限p?br />
上面两个对象模型估计一般情况下都是用不上的...只有在某些诡异需求的情况下可能会用到
转蝲QotecQErucy
]]>
//
q个属性是隐藏的,主要用于接收自定义的ToolPart中的自定义属性的?/span>
[Browsable(
false
),
Category(
"
Miscellaneous
"
),
DefaultValue(defaultText),
WebPartStorage(Storage.Personal),
FriendlyName(
"
Text
"
),
Description(
"
Text Property
"
)]
public
string
Text
{
get
{
return
text;
}
set
{
text
=
value;
}
}
要注意的一点就是这个属性是隐藏的,因ؓ我们不需要自带的WebPart昄出来Q所以将Browsable讄成false?
/**/
///
<summary>
///
Render this tool part to the output parameter specified.
///
</summary>
///
<param name="output">
The HTML writer to write out to
</param>
protected
override
void
RenderToolPart(HtmlTextWriter output)
{
ToolPane tp
=
this
.ParentToolPane;
CustomProps myWP
=
(CustomProps)tp.SelectedWebPart;
output.Write(
"
误入信息:<input name=\
""
+
inputname
+
"
\
"
type
=
\
"
text\
"
value
=
\
""
+
myWP.Text
+
"
\
"
><
BR
>
"
);
}
在这D代码中QToolPane tp = this.ParentToolPane是得到ToolPart所在的ToolPaneQ然后通过ToolPane.SelectedWebPart得到当前的WebPartQ然后通过WebPart.Text得到我们的那个隐藏|q个隐藏值就是文本框的初始倹{这个inputname的变量是做ؓ文本框的name。是在这个ToolPartcM声明的,如下Q?
public
CustPropsToolPart()
{
this
.Title
=
"
自定义属性的ToolPart
"
;
this
.Init
+=
new
EventHandler(CustPropsToolPart_Init);
}
private
void
CustPropsToolPart_Init(
object
sender, EventArgs e)
{
//
讄定义义属性的文本框的name
this
.inputname
=
this
.UniqueID
+
"
msg
"
;
}
在初始化函数中设|inputname的|q个值只要是一个唯一的就可以了,所以借助了UniqueID?
public
override
void
ApplyChanges()
{
//
Apply property values here.
//
得到WebPart对象
ToolPane tp
=
this
.ParentToolPane;
CustomProps myWP
=
(CustomProps)tp.SelectedWebPart;
//
我们自定义的g回到WebPart的Text属性中?/span>
myWP.Text
=
Page.Request.Form[inputname];
}
通过q段代码我们可以看到Q采用Page.Request.Form[inputname]得到输入在文本框中的|然后赋值给隐藏域?
]]>
只有在配|文件或 Page 指o中将启用会话状态设|ؓ真时Q才可以使用会话状?
N说在sps中不能用sessionQ?br />=================================================================
以上问题是一位网友遇到的问题Q也是我q几天刚遇到的,l过地毯式的排查Q发现问题出在SPSq里
1?br />C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\TEMPLATE\LAYOUTS目录里的 web.config文g里缺一句话Q?lt;add name=”Session?type=”System.Web.SessionState.SessionStateModule?>
加在<httpModules>里,加完之后?lt;httpModules>应该是这L:
<httpModules>
<clear />
<add name=”OutputCache?type=”System.Web.Caching.OutputCacheModule?/>
<add name=”WindowsAuthentication?type=”System.Web.Security.WindowsAuthenticationModule?/>
<add name=”Session?type=”System.Web.SessionState.SessionStateModule?>
</httpModules>
2、在SPS门户所在IIS发布目录里,扑ֈweb.config Q修改Pages里的enableSessionState 为true Q修改后应该是这LQ?br /><pages enableSessionState=”true?enableViewState=”true?enableViewStateMac=”true?validateRequest=”false?/>
using System.collection;
SPSite site = new SPSite("url");
SPWeb web = site.OpenWeb();
SPList list = web.Lists[listname];
SPView listview = onelist.Views[view];
Hashtable internalToTitle = new Hashtable();
foreach(SPField field in list.Fields)
{
internalToTitle.Add(field.InternalName, field.Title);
}
输出的时候{换一?
forQint j=0;j<listview.ViewFieldsQ?br />{
output.write(internalToTitle[view.ViewFields[j]].ToString());
}