2008-08-26 74 views
1

我有一个自定义的SharePoint应用程序页面部署到_layouts文件夹。这是自定义内容类型的自定义“新形式”。在我与此页面交互期间,我需要将一个项目添加到我的列表中。当页面第一次加载时,我可以使用SPContext.Current.List来查看我正在使用的当前列表。但是,当我填写表单并将表单发回到自身并且IsPostBack为true时,则SPContext.Current.List为空,因此我找不到需要添加我的东西的列表。自定义应用程序页面中的SharePoint SPContext.List

这是预期吗?

我应该如何在回传中保留关于我的上下文列表的一些信息?我应该只使用列表的guid填充一些asp:hidden控件,然后从回发中将它拉回来?我想这似乎很安全。

FWIW,这是MOSS 2007标准版。

回答

2

一般来说,我尝试复制产品组在尝试添加自己的功能时采取的任何方法。在这种情况下,他们通过列表定义本身添加他们自己的编辑/查看/添加页面。

我构建的解决方案也需要自己定制的“新”形式,不幸的是不是开源的,尽管如果你感兴趣,你可以下载它,它被称为“标签链接”(社会书签为SharePoint),你可以找到我的博客上的一些链接。

给你一些提示和技巧,下面应该设置你关在正确的方向:

  1. 创建一个新的列表定义。
  2. 创建一个新的内容类型在内容类型中,您可以定义自己的“FormTemplates”,它引用一个Rendering Template来确定显示在这些表单的“Middle”位的内容。
  3. 复制标准渲染模板,但随后对其进行了更改,我需要 。
  4. 将它们全部包装在解决方案中并进行部署。

我的渲​​染模板实际上包含了一个覆盖的“保存”按钮,我在保存过程中做了很多额外的工作。

无论如何,在我看来,这是一个有点太多的工作,但我认为它最符合产品开发人员采用的标准方法。让我知道你是否需要更多的细节,我会看看我是否可以一步一步地撰写博客文章,但希望这可以让你走向正确的方向。

0

我没有使用自定义“新窗体”,所以这可能不适用。我为我的自定义内容类型添加了一个事件接收器,然后在ItemAdded或ItemAdding事件中执行我的自定义代码。当事件添加到列表时,此代码会触发。您可以使用事件接收器属性来访问父列表,Web和站点。

0

我想我的问题是“特殊”,因为我使用自定义窗体。我选择使用自定义表单而不是自定义FormTemplate,因为我正在做很多不像SharePoint列表那样的东西(使ajax调用来从第三方应用程序获取信息,然后生成一些动态表单元素,这些动态表单元素基于那个ajax结果,然后后处理那个数据)。我认为在通常的自定义渲染模板机制中尝试这将是一场噩梦。

我也不认为我可以在列表定义本身提供自定义表单声明,因为我有多个与此列表关联的内容类型,并且每个内容类型都有自己的自定义表单(其他类型非常感谢简单)。

其实,我在隐藏域中保持列表guid的简单方法是解决这个特定问题的一个影响非常小的方法。我主要担心的是,我不确定为什么SPContext在我回发时失去了所有功能,这让我觉得我做错了什么。

3

如果您可以在_Layouts文件中执行某些您无法在表单模板中执行的操作,我会感到惊讶。您可以使用几乎相同的技术。

查看SharePoint与ListItems和Layouts页面的工作方式(例如对列表项目的“Manage Permissions”),我可以看到他们通过querystrings传递了一些变量: ?obj = {76113B3A-FABA-4389 -BC85-4BB2CC5AB423},6,LISTITEM & List = {76113B3A-FABA-4389-BC85-4BB2CC5AB423}

也许他们每次使用这些值以编程方式获取上下文。

相关问题