我正在查看一些破坏了SP2010中List项目更改保存的代码。在事件接收器的构造函数中,HttpContext被存储为局部变量,然后在 ItemUpdating 中,最后检索包含返回URL的查询参数并传递SPUtility.Redirect(...) 。这具有取消在编辑表单中进行的任何更改的效果。因此,按照这样的情况,我发现在线我将HttpContext存储为静态类对象,并在 ItemUpdated 事件中重定向,现在编辑持续存在,然后重定向到我们期望的位置。
我有一个问题,即将特定用户的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有一个List并向该列表添加一个项目触发事件接收器,它创建子网站B和其他相关的东西。如果我从Bs的SharePoint列表中修改B“项目”,那么我不需要重定向并返回列表就可以了。如果我正在寻找并在A上整齐地呈现甘特图列出B,如果我在点击保存后编辑B我们需要回到A.如果我在B上还有一个编辑按钮,所以我想回到B编辑完成后单击“保存”。
因此,当我们进入编辑屏幕时,我们会附加source =。从一些阅读我已经完成它似乎SharePoint将选择并重定向。编辑页面上的一个字段是A站点下面的相对URL,如果更改,则重定向URL将不再有效并抛出404,因此我们用新输入的值替换旧的B子路径。但我们需要将代码重定向到新位置。
答案 0 :(得分:2)
我不太确定我是否正确理解您的要求。但我会尝试一下。只是我理解的一个快速摘要(如果我错了,请纠正我......):
我的方法是:
希望这有帮助......干杯!
编辑:请阅读有关更改网址的要求。创建一个自定义编辑表单,您可以使用一些将值传递回原始站点的js进行增强 - > Parameters in dialogs。然后,您可以在javascript回调中做出相应的反应并重定向到新的URL。