ScriptManager未在Mono下加载javascript方法
我一直在努力解决asp.net ScriptManager.RegisterStartupScript()的问题 代码行如下: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
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中写的任何东西都不起作用
我尝试过的事情-
谢谢,如果您需要更多信息,请告诉我,我会尽力提供的。在对此进行了深入讨论之后,我越来越确信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+”)”,
正确的);
}
}