![](/img/trans.png)
[英]Javascript not working inside a website on IIS7.5 - Windows Server 2008 R2
[英]IIS 8.5/Windows 2012 R2 Application Pool HTML Rendering Is Breaking Javascript
我们已经从Windows 2003 / IIS 6升级了相当大的任务关键型Web应用程序,使其可以在Windows 2012 R2 / IIS 8.5上运行。
该应用程序框架为3.5,而IIS 8.5应用程序最初设置为CLR 2.0,但在发现关键功能(哈希表排序)未按预期工作时更改为4.0。
这解决了哈希表问题,但是现在看来HTML的呈现方式有所不同,这破坏了javascript功能和CSS。
例如:
图像的左侧(clr2.0应用程序池)显示了带有所需'ctl00 $'前缀的正确呈现的控件,但是图像的右侧(clr4.0应用程序池)显示了HTML的呈现方式不正确,发生在整个页面中,从而破坏了我们所需的Javascript功能。
这是另一个例子:
MS建议将整个应用程序升级到4.0框架,但由于HTML仍呈现相同的外观,因此JS似乎仍然不起作用。
这是一小段代码,它将客户端Javascript事件添加到.cs代码后面的asp.net Link控件中:
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
LinkButton lnk = e.Item.FindControl("btnlnk2") as LinkButton;
DataRowView row = e.Item.DataItem as DataRowView;
if (lnk != null && row!=null)
{
lnk.Text = row["Linktext"].ToString();
lnk.OnClientClick = "return SetStatus('" + cgridNumbered.ClientID + "_ctl" + "','" + row["Name"].ToString() + "')";
}
}
这是aspx页面中的实际Javascript:
function SetStatus(ddTarget,strLnk) {
var ctrl = document.getElementById(ddTarget);
var str = strLnk;
var chkNameLast = "_ddlNextMaterialStatus";
var i = 3;
var tempchkobj = document.getElementById(ddTarget + "02" + chkNameLast);
var intIdx = -1;
var intMax = tempchkobj.options.length;
for (var intOpt = 0; intOpt < intMax; intOpt++) {
if (tempchkobj.options[intOpt].text == strLnk) {
intIdx = intOpt; // this is the index
intOpt = intMax; // escape the loop
}
}
//more code..
return false;
}
当触发此事件时使用4.0 CLR运行应用程序时,ddTarget的值为“ MainContentPlaceHolder_cgridNumbered_ctl”
但是HTML的呈现方式如下:
<a onclick="return SetStatus('MainContentPlaceHolder_cgridNumbered_ctl','Confirmed');" id="MainContentPlaceHolder_DataList1_btnlnk2_0" href="javascript:__doPostBack('ctl00$MainContentPlaceHolder$DataList1$ctl00$btnlnk2','')">Confirm All</a>
似乎单引号已被翻译成等效的HTML:
'
由于无法找到此DOM对象,因此Javascript中断了。
当我们将“应用程序池” clr切换为2.0时,HTML正确呈现如下:
<a onclick="return SetStatus('ctl00_MainContentPlaceHolder_cgridNumbered_ctl','Confirmed');" id="ctl00_MainContentPlaceHolder_DataList1_ctl00_btnlnk2" href="javascript:__doPostBack('ctl00$MainContentPlaceHolder$DataList1$ctl00$btnlnk2','')">Confirm All</a>
而且我们的Javascript可以按预期工作。
在此先感谢您提供的任何帮助,我们已经为此工作了一个月。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.