Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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
ScriptManager未在Mono下加载javascript方法_Javascript_Asp.net_Apache_Mono - Fatal编程技术网

ScriptManager未在Mono下加载javascript方法

ScriptManager未在Mono下加载javascript方法,javascript,asp.net,apache,mono,Javascript,Asp.net,Apache,Mono,我一直在努力解决asp.net ScriptManager.RegisterStartupScript()的问题 代码行如下: string script = string.Format("initGame('{0}','{1}');", var1, var2); ScriptManager.RegisterStartupScript(Page, typeof(Page), "mainGameScript", script, true); string tagStart = "<scr

我一直在努力解决asp.net ScriptManager.RegisterStartupScript()的问题

代码行如下:

string script = string.Format("initGame('{0}','{1}');", var1, var2);

ScriptManager.RegisterStartupScript(Page, typeof(Page), "mainGameScript", script, true);
string tagStart = "<script type=\"text/javascript\">";
string tagEnd = "</script>";
string script = string.Format("initGame('{0}','{1}');", var1, var2);

script = tagStart + script + tagEnd;

if (!Page.ClientScript.IsStartupScriptRegistered("mainGameScript"))
{
     //ScriptManager.RegisterStartupScript(Page, typeof(Page), "mainGameScript", script, true);
     // Left in for historical purpose

    ClientScript.RegisterStartupScript(typeof(Page), "mainGameScript", script);
 }
该页面托管在运行Apache2和mono的Ubuntu机器上。我在RegisterStartupScript中写的任何东西都不起作用

我尝试过的事情-

  • 带IIS的Windows服务器-工作正常
  • 在调用ScriptManager之前立即输出一些web文本- 工作
  • 在一个调用“initGame()”方法的按钮中编码-有效
  • 将javascript直接放入RegisterStartupScript调用- 不起作用
  • 将javascript放在页面中-有效
  • 在我看来,ScriptManager行似乎存在问题,要么是一些琐碎的事情,要么是我需要做/更改才能在Mono下运行。如果你想看一看,网址是


    谢谢,如果您需要更多信息,请告诉我,我会尽力提供的。

    在对此进行了深入讨论之后,我越来越确信ScriptManager存在问题。我甚至在回购协议中安装了Mono 3.07,但仍然没有解决任何问题

    解决这个问题的方法是用ClientScript类替换ScriptManager。尽管ClientScript类下的RegisterStartupScript()没有添加脚本标记的选项,但方法保持不变

    一个简单的补救办法如下:

    string script = string.Format("initGame('{0}','{1}');", var1, var2);
    
    ScriptManager.RegisterStartupScript(Page, typeof(Page), "mainGameScript", script, true);
    
    string tagStart = "<script type=\"text/javascript\">";
    string tagEnd = "</script>";
    string script = string.Format("initGame('{0}','{1}');", var1, var2);
    
    script = tagStart + script + tagEnd;
    
    if (!Page.ClientScript.IsStartupScriptRegistered("mainGameScript"))
    {
         //ScriptManager.RegisterStartupScript(Page, typeof(Page), "mainGameScript", script, true);
         // Left in for historical purpose
    
        ClientScript.RegisterStartupScript(typeof(Page), "mainGameScript", script);
     }
    
    string tagStart=“”;
    字符串tagEnd=“”;
    string script=string.Format(“initGame('{0}','{1}');”,var1,var2);
    脚本=标记开始+脚本+标记结束;
    如果(!Page.ClientScript.isstartupscript已注册(“mainGameScript”))
    {
    //ScriptManager.RegisterStartupScript(第页,typeof(第页),“mainGameScript”,script,true);
    //留作历史用途
    RegisterStartupScript(typeof(Page),“mainGameScript”,script);
    }
    
    在对这个问题进行了深入讨论之后,我越来越确信ScriptManager存在问题。我甚至在回购协议中安装了Mono 3.07,但仍然没有解决任何问题

    解决这个问题的方法是用ClientScript类替换ScriptManager。尽管ClientScript类下的RegisterStartupScript()没有添加脚本标记的选项,但方法保持不变

    一个简单的补救办法如下:

    string script = string.Format("initGame('{0}','{1}');", var1, var2);
    
    ScriptManager.RegisterStartupScript(Page, typeof(Page), "mainGameScript", script, true);
    
    string tagStart = "<script type=\"text/javascript\">";
    string tagEnd = "</script>";
    string script = string.Format("initGame('{0}','{1}');", var1, var2);
    
    script = tagStart + script + tagEnd;
    
    if (!Page.ClientScript.IsStartupScriptRegistered("mainGameScript"))
    {
         //ScriptManager.RegisterStartupScript(Page, typeof(Page), "mainGameScript", script, true);
         // Left in for historical purpose
    
        ClientScript.RegisterStartupScript(typeof(Page), "mainGameScript", script);
     }
    
    string tagStart=“”;
    字符串tagEnd=“”;
    string script=string.Format(“initGame('{0}','{1}');”,var1,var2);
    脚本=标记开始+脚本+标记结束;
    如果(!Page.ClientScript.isstartupscript已注册(“mainGameScript”))
    {
    //ScriptManager.RegisterStartupScript(第页,typeof(第页),“mainGameScript”,script,true);
    //留作历史用途
    RegisterStartupScript(typeof(Page),“mainGameScript”,script);
    }
    
    我遇到了同样的问题。“ScriptManager.RegisterStartupScript”在异步回发(ASP.NET 2.0,Ubuntu服务器13.10)中不起作用。 但是,如果页面是第一次加载的,那么它工作得很好

    在挖掘了Mono源之后 我看到有一些预编译的东西,脚本被添加到最终输出中:

    switch (scriptEntry.ScriptType) {
      case RegisteredScriptType.ClientScriptBlock:
        if (scriptEntry.AddScriptTags)
          WriteCallbackOutput(output, scriptBlock, scriptContentNoTags, scriptEntry.Script);
        else
          WriteCallbackOutput(output, scriptBlock, scriptContentWithTags, SerializeScriptBlock(scriptEntry));
        break;
    #if NET_3_5
      case RegisteredScriptType.ClientStartupScript:
        if (scriptEntry.AddScriptTags)
          WriteCallbackOutput (output, scriptStartupBlock, scriptContentNoTags, scriptEntry.Script);
        else
          WriteCallbackOutput (output, scriptStartupBlock, scriptContentWithTags, SerializeScriptBlock (scriptEntry));
        break;
    #endif
      case RegisteredScriptType.ClientScriptInclude:
        WriteCallbackOutput(output, scriptBlock, scriptPath, scriptEntry.Url);
        break;
      case RegisteredScriptType.OnSubmitStatement:
        WriteCallbackOutput(output, onSubmit, null, scriptEntry.Script);
        break;
    }
    
    也许有人忘了定义“NET_3_5”,所以该部分不起作用。 此外,在初始页面加载时,“ScriptManager.RegisterStartupScript”实际上调用了“ClientScript.RegisterStartupScript”(这就是它在这种情况下工作的原因)

    我的解决方案是使用“ScriptManager.RegisterClientScriptBlock”(按预期工作)模拟该行为:

    //
    ///始终添加脚本标记。
    /// 
    公共静态无效ScriptManagerRegisterStartupScript(控件、类型、字符串键、字符串脚本){
    if(!ScriptManager.GetCurrent(control.Page).IsInAsyncPostBack)
    control.Page.ClientScript.RegisterStartupScript(类型、键、脚本、true);
    否则{
    string hName=string.Format(“h{0}”,Guid.NewGuid().ToString(“N”);//获取唯一名称的惰性方法
    ScriptManager.RegisterClientScriptBlock(控件、类型、键、,
    “函数”+hName+“(){”+
    “Sys.WebForms.PageRequestManager.getInstance()。删除页面加载(“+hName+”)”+
    script+//这就是为什么我们不支持“addScriptTags==false”
    "}" +
    “Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(“+hName+”)”,
    正确的);
    }
    }
    
    我遇到了同样的问题。“ScriptManager.RegisterStartupScript”在异步回发(ASP.NET 2.0,Ubuntu服务器13.10)中不起作用。 但是,如果页面是第一次加载的,那么它工作得很好

    在挖掘了Mono源之后 我看到有一些预编译的东西,脚本被添加到最终输出中:

    switch (scriptEntry.ScriptType) {
      case RegisteredScriptType.ClientScriptBlock:
        if (scriptEntry.AddScriptTags)
          WriteCallbackOutput(output, scriptBlock, scriptContentNoTags, scriptEntry.Script);
        else
          WriteCallbackOutput(output, scriptBlock, scriptContentWithTags, SerializeScriptBlock(scriptEntry));
        break;
    #if NET_3_5
      case RegisteredScriptType.ClientStartupScript:
        if (scriptEntry.AddScriptTags)
          WriteCallbackOutput (output, scriptStartupBlock, scriptContentNoTags, scriptEntry.Script);
        else
          WriteCallbackOutput (output, scriptStartupBlock, scriptContentWithTags, SerializeScriptBlock (scriptEntry));
        break;
    #endif
      case RegisteredScriptType.ClientScriptInclude:
        WriteCallbackOutput(output, scriptBlock, scriptPath, scriptEntry.Url);
        break;
      case RegisteredScriptType.OnSubmitStatement:
        WriteCallbackOutput(output, onSubmit, null, scriptEntry.Script);
        break;
    }
    
    也许有人忘了定义“NET_3_5”,所以该部分不起作用。 此外,在初始页面加载时,“ScriptManager.RegisterStartupScript”实际上调用了“ClientScript.RegisterStartupScript”(这就是它在这种情况下工作的原因)

    我的解决方案是使用“ScriptManager.RegisterClientScriptBlock”(按预期工作)模拟该行为:

    //
    ///始终添加脚本标记。
    /// 
    公共静态无效ScriptManagerRegisterStartupScript(控件、类型、字符串键、字符串脚本){
    if(!ScriptManager.GetCurrent(control.Page).IsInAsyncPostBack)
    control.Page.ClientScript.RegisterStartupScript(类型、键、脚本、true);
    否则{
    string hName=string.Format(“h{0}”,Guid.NewGuid().ToString(“N”);//获取唯一名称的惰性方法
    ScriptManager.RegisterClientScriptBlock(控件、类型、键、,
    “函数”+hName+“(){”+
    “Sys.WebForms.PageRequestManager.getInstance()。删除页面加载(“+hName+”)”+
    script+//这就是为什么我们不支持“addScriptTags==false”
    "}" +
    “Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(“+hName+”)”,
    正确的);
    }
    }