簡體   English   中英

為什么javascript indexOf()方法在從C#代碼隱藏調用時拋出錯誤?

[英]Why does javascript indexOf() method throw error when called from C# code-behind?

我在項目中使用Google導航圖表。

當我在客戶端(.aspx頁面)運行javascript代碼時,一切正常,但是當我把它放在后面的代碼中並回顯/寫出來時(通過Response.Write())它會拋出一個錯誤,特別是在javascript代碼試圖在數組上調用indexOf()方法的點。

我試圖檢查錯誤的原因,但我得到的唯一信息是這是IE8中的一個問題,早期使用indexOf()方法 - 這不是我的問題,因為正如我所說它在我調用時工作正常它直接來自客戶端 - 它只是從代碼隱藏中產生問題。

這是我收到的具體錯誤:

0x800a01b6 - Microsoft JScript運行時錯誤:對象不支持屬性或方法'indexOf'

這將工作正常(在客戶端):

for (var i = 0; i < data.getNumberOfColumns() ; i++) {
if (i == 0 || defaultSeries.indexOf(i) > -1) {
// if the column is the domain column or in the default list, display the series
columns.push(i);
}
....

但這會拋出錯誤(在代碼隱藏中):

htmlJS += "for (var i = 0; i < data.getNumberOfColumns() ; i++) {";
htmlJS += "if (i == 0 || defaultSeries.indexOf(i) > -1) {";
// if the column is the domain column or in the default li";st, display the series
htmlJS += "columns.push(i);";
htmlJS += "}";
....
Response.Write(htmlJS);

有誰知道為什么這個錯誤只發生在代碼隱藏?

假設defaultSeries是一個數組, 需要填充工具Array.prototype.indexOf為IE <9,只支持對字符串的indexOf。

這是來自MDN的polyfill

  if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (searchElement, fromIndex) {
      if ( this === undefined || this === null ) {
        throw new TypeError( '"this" is null or not defined' );
      }

      var length = this.length >>> 0; // Hack to convert object.length to a UInt32

      fromIndex = +fromIndex || 0;

      if (Math.abs(fromIndex) === Infinity) {
        fromIndex = 0;
      }

      if (fromIndex < 0) {
        fromIndex += length;
        if (fromIndex < 0) {
          fromIndex = 0;
        }
      }

      for (;fromIndex < length; fromIndex++) {
        if (this[fromIndex] === searchElement) {
          return fromIndex;
        }
      }

      return -1;
    };
  }

兩件事情:

  1. 根據您的代碼,您可能會遇到javascript的空白問題 - 您正在連接字符串,因此,例如,您將有一個看起來像“{if”的部分 - 但是,這可能不會導致您的問題。

  2. 可能導致您的問題的是javascript命中頁面的時間。 當response.write被刷新到客戶端時,對象是否存在? 為了確保在需要時存在頁面的所有必需位,通常需要使用腳本對象方法添加腳本,然后在加載頁面后調用代碼。 查看此頁面,將腳本動態添加到頁面: http//msdn.microsoft.com/en-us/library/ms178207(v = vs.100).aspx

謝謝大家 - 我找到了一個有效的解決方案:

如果我創建包含javascript indexOf()方法的相同字符串,然后將其作為輸出分配給aspx頁面上的文字元素,或者如果我通過<%%>特殊標記“回顯”它,那么javascript代碼會運行正常。

所以以下運行:

代碼隱藏:

public string jsHtml ="";

jsHtml +="<script type='text/javascript'>";
jsHtml+="var defaultSeries = [1,2,3];";
jsHtml+="alert(defaultSeries.indexOf(2));";
jsHtml+="</script>";

txtValueA.Text = jsHtml;

客戶/ aspx頁面:

<asp:Literal ID="txtValueA" runat="server></asp:Literal>
//OR
<%=jsHtml %>

奇怪但真實.....感謝輸入

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM