我正在查看一些破坏了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子路径。但是,我们需要将代码重定向到新的位置。
该事件接收器的目的是什么?是否验证列表项数据? – Vaibhav
我会再次@ Vaibhav的问题,并添加重定向的目的是什么?根据上下文,您可能会更好地使用客户端JavaScript而不是服务器端C#来处理重定向。 – Thriggle
我已经添加了一些更多的细节。感谢您的回复 –