2017-05-03 45 views
7

我正在查看一些破坏了SP2010中List项目更改保存的代码。在Event Receiver的构造函数中,HttpContext被存储为局部变量,然后在ItemUpdating最后包含返回URL的查询参数被检索并传递给SPUtility.Redirect(...)。这具有取消编辑表单中所做更改的效果。因此,我在网上找到了这样的场景,我将HttpContext存储为一个静态类对象,并将其重定向到事件中,现在编辑已保留,然后重定向到我们期望的位置。在Sharepoint 2010事件接收器中重定向

虽然将一个特定用户的HttpContext作为静态存储在某个类中,但如果另一个用户在用户初始设置上下文和重定向之前执行相同操作时可能会被劫持,我有一个担忧。用户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”,那么我不需要重定向并返回到列表中就没有问题。如果我正在寻找并在A列出Bs上整齐呈​​现的甘特图,如果在单击“保存”后编辑B,我们需要返回到A.如果我在B上也有编辑按钮,那么我想返回到B编辑并单击保存后。

所以当我们进入编辑屏幕时,我们有了source = additional。从我做的一些阅读看来,SharePoint似乎会挑选并重定向。编辑页面上的其中一个字段是A站点下方的相对URL,如果发生更改,则重定向URL将不再有效并抛出404,因此我们用新输入的值替换旧的B子路径。但是,我们需要将代码重定向到新的位置。

+0

该事件接收器的目的是什么?是否验证列表项数据? – Vaibhav

+0

我会再次@ Vaibhav的问题,并添加重定向的目的是什么?根据上下文,您可能会更好地使用客户端JavaScript而不是服务器端C#来处理重定向。 – Thriggle

+0

我已经添加了一些更多的细节。感谢您的回复 –

回答

2

我不太确定我是否正确理解您的要求。但我会试一试。只是对我所了解的内容进行了快速总结(如果我错了,请纠正我......):

  • 你有一个网站集根网站与下面的根网站列表
  • 在该列表中的每个条目对应于将在列表项创建(ER创建一个子网站)作为一个子网站
  • 列表项可以从两个根网页列表,以及从它映射子网站
  • 在从要节省

我的方法后返回子网站的子网站编辑进行编辑会是这样的:

  1. 按照本文SP Dialog and List Forms
  2. 公开赛上链接到根网站的编辑表单的一个子网站对话框中描述的步骤。
  3. 节省了用户后发现自己已经在那里,他应该是

希望这有助于...干杯!

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

+0

当我没有时间去尝试它,并确认方法,因为赏金即将到来的时间。根据你所描述的,我想我可以看到你的意思,所以我会提前接受这个答案。感谢堆的建议。 –

+0

如果模态是否只能传回数值?我们现有的系统不是模式,所以想知道如果我必须修改所有的东西以按照您的建议进行工作? –

相关问题