繁体   English   中英

IIS 8.5 / Windows 2012 R2应用程序池HTML渲染破坏了Javascript

[英]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。

例如:

Winmerge Diff-CLR 2.0左-CLR 4.0右 图像的左侧(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(&#39;MainContentPlaceHolder_cgridNumbered_ctl&#39;,&#39;Confirmed&#39;);" id="MainContentPlaceHolder_DataList1_btnlnk2_0" href="javascript:__doPostBack(&#39;ctl00$MainContentPlaceHolder$DataList1$ctl00$btnlnk2&#39;,&#39;&#39;)">Confirm All</a> 

似乎单引号已被翻译成等效的HTML:

&#39;

由于无法找到此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可以按预期工作。

在此先感谢您提供的任何帮助,我们已经为此工作了一个月。

IIS中的“打开的页面和控件”设置

页面和控件

将设置更改为以下内容:

在此处输入图片说明

CSS和Javascript现在可以使用,HTML可以按预期呈现:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM