我在ASPX上有脚本:
<dx:ASPxButton ID="ASPxButton_PrintLetrVoit" runat="server" Text="Impression lettre de voiture(décalage)" AutoPostBack="False">
<ClientSideEvents Click="function (s, e) { e.processOnServer = false; for (var i = 0; i < Tourne.length; i++) {window.open('PrintLettreVoit.aspx?TourneId='+Tourne[i]);}}" />
</dx:ASPxButton>
和cs:
public List<string> Tourne;
protected void Page_Load(object sender, EventArgs e)
{
try
{
foreach (var oItem in oOrdre_BL.GetAllLettrVoit_Tourne())
{
Page.ClientScript.RegisterArrayDeclaration("Tourne", "'"+oItem+"'");
}
......
不幸的是我在javascript上遇到了错误: 我收到了错误:
Horodatage : 06/09/2012 11:23:03
Erreur : ReferenceError: Tourne is not defined
Fichier Source : http://xxxxxxx/Code/BackEnd/FaExped_BackEnd_WebSite/Ordre.aspx
Ligne : 5146
任何想法?
提前谢谢你
PS:当我看到生成的源代码时:
<script type="text/javascript">
//<![CDATA[
var Tourne = new Array('');
//]]>
</script>
<script type="text/javascript">
//<![CDATA[
WebForm_InitCallback();//]]>
</script>
</form>
</body>
</html>
我修改了我的代码:
<dx:ASPxButton ID="ASPxButton_PrintLetrVoit" runat="server" Text="Impression lettre de voiture(décalage)" AutoPostBack="False">
<ClientSideEvents Click="function (s, e) {
if(typeof(Tourne) !== 'undefined' && Tourne != null)
{
e.processOnServer = false;
for (var i = 0; i < Tourne.length; i++) {window.open('PrintLettreVoit.aspx?TourneId='+Tourne[i]);}
}
else
{alert ('Tous est coches');}
}" />
</dx:ASPxButton>
但是,它仍然不是一个好的解决方案,因为我不知道为什么Tourne未定义?
答案 0 :(得分:0)
可能是数据中有一些单引号。这是一个问题的原因如下:
当您调用“Page.ClientScript.RegisterArrayDeclaration”时,它会将该项添加到页面底部的JavaScript数组声明中。
所以,以下内容:
Page.ClientScript.RegisterArrayDeclaration("Tourne", "'a'");
Page.ClientScript.RegisterArrayDeclaration("Tourne", "'b'");
Page.ClientScript.RegisterArrayDeclaration("Tourne", "'c'");
将在页面上呈现以下JavaScript:
<script type="text/javascript">
//<![CDATA[
var Tourne = new Array('a', 'b', 'c');
//]]>
</script>
如果“oOrdre_BL.GetAllLettrVoit_Tourne()”返回的数据中有任何单引号,则会插入这些单引号。所以,如果我添加了“'brok'en'”的第四个元素(因为它有一个额外的单引号而无效):
Page.ClientScript.RegisterArrayDeclaration("Tourne", "'brok'en'");
然后它会呈现以下无效的JavaScript:
<script type="text/javascript">
//<![CDATA[
var Tourne = new Array('a', 'b', 'c', 'brok'en');
//]]>
</script>
如果发生这种情况,那么“Tourne”将永远无法正确定义,因为JavaScript无效。因此,在尝试将数据放入数组之前,应该“清理”数据。以下应该可以“逃避”单引号:
Page.ClientScript.RegisterArrayDeclaration("Tourne", "'" + oItem.Replace("'", "\\'") + "'");
当然,这是基于错误数据的假设。如果这不起作用,最好的办法是在查看页面时在浏览器中“查看源代码”。看一下标记的底部,其中“Tourne”在JavaScript中定义,并在此处发布 - 它应该有助于弄清楚发生了什么。
答案 1 :(得分:0)
我遇到了同样的问题,我发现我的页面位于创建问题的更新面板中。我必须禁用脚本管理器的部分呈现属性,如下所示:
<telerik:RadScriptManager ID="radScriptManager1" runat="server" EnablePartialRendering="false"/>