Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sharepoint 2010 指定为“时,未在部分回发中加载脚本引用”;新脚本引用(resourceName、assemblyName)";_Sharepoint 2010_.net 3.5_Asp.net Ajax_Updatepanel_Partial Postback - Fatal编程技术网

Sharepoint 2010 指定为“时,未在部分回发中加载脚本引用”;新脚本引用(resourceName、assemblyName)";

Sharepoint 2010 指定为“时,未在部分回发中加载脚本引用”;新脚本引用(resourceName、assemblyName)";,sharepoint-2010,.net-3.5,asp.net-ajax,updatepanel,partial-postback,Sharepoint 2010,.net 3.5,Asp.net Ajax,Updatepanel,Partial Postback,我创建了一个ASP.NET AJAX控件,该控件按照实现。此控件在加载脚本资源时按预期工作;但是,问题是脚本资源并非总是加载的 当从完整回发加载时,该控件将加载所有适当的引用资源。这并不奇怪。控制工作正常。它遵循适当的IScriptControl规则,注册脚本控件并呈现适当的脚本描述符。实现了GetScriptReferences和GetScriptDescriptions 现在,当GetScriptReferences写为 public IEnumerable<ScriptReferen

我创建了一个ASP.NET AJAX控件,该控件按照实现。此控件在加载脚本资源时按预期工作;但是,问题是脚本资源并非总是加载的

当从完整回发加载时,该控件将加载所有适当的引用资源。这并不奇怪。控制工作正常。它遵循适当的
IScriptControl
规则,注册脚本控件并呈现适当的脚本描述符。实现了
GetScriptReferences
GetScriptDescriptions

现在,当GetScriptReferences写为

public IEnumerable<ScriptReference> GetScriptReferences()
{
  return new List<ScriptReference> {
    new ScriptReference("Resource.js", GetType().Assembly.FullName)
  }
}
。。然后加载资源,即使在部分回发中也是如此。请求可以在浏览器网络日志中查看为
http://dev/WebResource.axd?d=..
。我希望避免使用第二种形式,因为这样我就必须手动添加代码

正在使用以下配置在自定义SharePoint 2010母版页中创建ASP.NET 3.5 ScriptManager(以替换默认ScriptManager控件):

<aspExt:ScriptManager runat="server" ID="MyScriptManager"
    EnablePartialRendering="True" EnablePageMethods="True" EnableViewState="True"
    EnableHistory="True" EnableSecureHistoryState="False"
    EnableScriptLocalization="False" EnableScriptGlobalization="False"
    LoadScriptsBeforeUI="True">
</aspExt:ScriptManager>



通过
ScriptManager.RegisterClientScriptResource
(从
http://dev/ScriptResource.axd?d=..
)“工作”但是在这样做时,控件需要打破IScriptControl模型,并且不从GetScriptReferences返回任何引用,以便在完全和部分回发情况下都可以确保一致的行为。否则,在完全回发的情况下,当脚本资源实际正确加载时,同一资源将被加载多次。

这似乎是SharePoint 2010的问题,我终于能够找到一些有关这方面的信息

这是Sharepoint 2010中的一个已知问题。如果控件最初不可见,则不会加载脚本资源

。。“Sharepoint 2010在部分回发时不发出javascript链接”问题。。如果在部分回发期间添加控件(或使控件可见),则发生

谢天谢地

微软终于在2011年10月的Sharepoint 2010累积更新中解决了这个问题。安装此更新通常可以解决隐藏的ajax控件注册脚本的问题

这似乎是第一个CU与修复-虽然我还没有验证这一点


对于历史参考,或者对于像我这样不能确保应用CU/SP的穷人,“工作”是手动注册资源。(这也可以在链接帖子中找到。)

公共类MyComboBox:RadComboBox
{
受保护的覆盖System.Collections.Generic.IEnumerable GetScriptReferences()
{
#如果手动\u脚本\u回发\u修复
HashSet registeredNames=新HashSet();
ReadOnlyCollection RegisteredScript=ScriptManager.GetCurrent(第页).GetRegisteredClientScriptBlocks();
foreach(RegisteredScript中的RegisteredScript)
{
registeredNames.Add(registeredScript.Key);
}
foreach(base.GetScriptReferences()中的ScriptReference引用)
{
如果(!registeredNames.Contains(reference.Name))
{
RegisterClientScriptResource(this,typeof(MyComboBox).BaseType,reference.Name);
}
}
返回新列表();
#否则
返回base.GetScriptReferences();
#恩迪夫
}
}

为什么有7张反对票而没有一条评论?@KyleMit我戴着它作为荣誉勋章,我的好先生!虽然这个问题和工作[希望!]已经过时,但一些可怜的笨蛋可能仍然会在其中找到用武之地。我还是那样做了,现在是2104。。叹息
<aspExt:ScriptManager runat="server" ID="MyScriptManager"
    EnablePartialRendering="True" EnablePageMethods="True" EnableViewState="True"
    EnableHistory="True" EnableSecureHistoryState="False"
    EnableScriptLocalization="False" EnableScriptGlobalization="False"
    LoadScriptsBeforeUI="True">
</aspExt:ScriptManager>
public class MyComboBox : RadComboBox
{
    protected override System.Collections.Generic.IEnumerable<System.Web.UI.ScriptReference> GetScriptReferences()
    {
#if MANUAL_SCRIPT_POSTBACK_FIX
        HashSet<string> registeredNames = new HashSet<string>();
        ReadOnlyCollection<RegisteredScript> registeredScripts = ScriptManager.GetCurrent(Page).GetRegisteredClientScriptBlocks();           
        foreach (RegisteredScript registeredScript in registeredScripts)
        {
            registeredNames.Add(registeredScript.Key);
        }
         
        foreach (ScriptReference reference in base.GetScriptReferences())
        {
            if (!registeredNames.Contains(reference.Name))
            {
                ScriptManager.RegisterClientScriptResource(this, typeof(MyComboBox).BaseType, reference.Name);
            }
        }
        return new List<ScriptReference>();
#else
        return base.GetScriptReferences();
#endif     
    }
}