在 Sharepoint 2010 事件接收器中重定向

Redirect in Sharepoint 2010 Event Receiver

我正在查看一些代码,它破坏了 SP2010 中列表项更改的保存。在事件接收器的构造函数中,HttpContext 被存储为局部变量,然后在 ItemUpdating 中最后检索包含 return url 的查询参数并通过了 SPUtility.Redirect(...)。这具有取消在编辑表单中所做的任何更改的效果。因此,按照我在网上找到的场景,我将 HttpContext 存储为静态 class 对象并在 ItemUpdated 事件中重定向,并且编辑现在会保留,然后重定向到我们期待的地方。

我担心将特定用户的 HttpContext 作为静态存储在 class 上,如果另一个用户在用户 1 最初和之前设置上下文之间执行相同的操作,则可能会被劫持重定向。用户 2 将覆盖上下文并且存在潜在问题。

我能想到的唯一其他快速出路是存储一个静态字典,其中键是用户 ID,然后在重定向之前删除条目,以免遗漏 HttpContext 实例。

因此,查看 here 接受的解决方案,servy42 的第一个响应指出 The fact that it works for a few trivial test cases at first doesn't make it a viable solution.,但并未提出可行的解决方案。

还有另一个选项 best approach may be changing Save Button in ribbon such that when clicked, a ECMA script first save your Item, then redirect to other page, or open other page in dialog. 建议进一步向下,但这是唯一的其他方法吗?

我对 SP 还很陌生,只是试图以我有限的知识来浏览大量错误的做事方式,不幸的是被 SP2010 困住了。

关于如何解决这个问题有什么想法吗?

============

编辑:根据要求提供更多信息

所以有两个站点,一个叫做 A,它们将有一个名为 B 的子站点。A 有一个列表,向该列表添加一个项目会触发事件接收器,该事件接收器会创建子站点 B 和其他相关内容。如果我从 Bs 的 SharePoint 列表修改 B "item",那么我不需要重定向并且 returning 到列表就可以了。如果我正在查看并在 A 上整齐呈现的甘特图列出 B,如果我在单击“保存”后编辑 B,我们需要返回到 A。如果我在 B 上,也有一个编辑按钮,所以我想 return 编辑后点击保存到B。

所以我们在进入编辑屏幕时附加了 source=。从我读过的一些文章来看,SharePoint 似乎会选择并重定向。编辑页面上的字段之一是 A 站点下方的相对 url,如果发生变化,则重定向 url 将不再有效并抛出 404,因此我们将旧的 B 子路径替换为新输入的值。但是我们随后需要代码来重定向到新位置。

我不太确定我是否正确理解了您的要求。但我会试一试。快速总结一下我的理解(如果我错了请纠正我...):

  • 您在带有列表的网站集中有一个根网站
  • 该列表中的每个条目都对应一个子站点,该子站点将在根网站下方的列表项创建 (ER) 中创建为子站点
  • 可以从根站点中的列表以及它映射到的子站点编辑列表项
  • 从您要编辑的子站点return到保存后的子站点

我的方法是这样的:

  1. 按照本文所述的步骤进行操作 SP Dialog and List Forms
  2. 在链接到根网站编辑表单的子站点上打开一个对话框。
  3. 保存后用户发现自己已经在他应该在的地方

希望这对您有所帮助...干杯!

编辑: 只需阅读有关更改 url 的要求。创建一个自定义编辑表单,您可以使用一些将值传递回源站点的 js 对其进行增强 -> Parameters in dialogs。然后您可以在 javascript 回调中做出相应的反应并重定向到新的 url.