0

XML ファイルから JS 関数に読み込んでいる文字列を取得しようとしています。何らかの理由で、Chrome のデバッガーは、Glist の値が文字列ではないと言います。

コード:

<!DOCTYPE html>

<html>

<head id="Head1" runat="server">

    <%@ Page Language="C#" %>

    <title>GAGEmobile</title>
    <link rel="stylesheet" href="/Content/MenuStyle.css" />
    <script type="text/javascript" src="Scripts/jQuery.js"></script>
    <script type="text/javascript" src="Scripts/Scripts.js"></script>
</head>
<body id="generalBody" runat="server" dir="rtl">

   <form runat="server" id="hidden">
        <input type="hidden" runat="server" value='' id="Glist" />
    </form>

    <%
       var reader = new GAGEmobile.Models.ReadXML();
       var data = reader.getDataFromXML("https://gagemobile-
       demo.servicebus.windows.net/gagemobile/gage/15/sample/david/blah");
       this.Glist.Value = data;
    %>

    <script type="text/javascript">
        $(document).ready(function () {
            displayGageInfo(String("<%: Glist.Value %>"));
         });

    </script>

</body>
</html>

GList の文字列は次のとおりです。

"ゲージ番号|C-01001|ゲージ タイプ|キャリパー|ゲージ サイズ|1 |測定単位|インチ|ゲージの説明|アブソリュート エンコーダー内蔵のデジ|保管場所|工具箱|現在の場所|工具箱|ステータス|使用可能|所有者|会社|グループ|Calib グループ|EmailTo|Bobby Mohr|最終校正日|2013 年 3 月 28 日|Calib 期日|2013 年 9 月 28 日|最終 RR 日付|2012 年 9 月 5 日|RR 期日|9/5 /2013|最終メンテナンス日|2013/2/27|メンテナンス期限|2015/2/27|メーカー|ファウラー|モデル番号|FIC-23451|シリアル番号|18732|コメント|校正グループの説明
校正グループは、すべて同時に校正される一連のゲージとして定義されています。上記の Group フィールドを使用して、この値を設定します。これにより、これらのゲージを簡単にフィルタリングして、キャリブレーションのために収集することができます。SCHEDMAINTDUE の説明 また、ユーザー定義フィールドを使用して、SchedMaintDue という新しいフィールドを作成しました。このフィールドを使用すると、スケジュールされたメンテナンス期日を定義して、ゲージのフィルタリングとメンテナンス サイクルの参照に簡単にアクセスできます。」

サーバーコードに文字列がありますが、すべて問題ありません。JS に渡すときに何か問題が発生し、その理由がわかりません。

JS で escape() および toString() 関数を使用してみました。

編集:「displayGageInfo(String("<%: Glist.Value %>"));」でエラーが発生します 認識されないトークンとして

XML を読み取る ASP.NET:

public string getDataFromXML(string url)
{
   var xml = new XmlDocument();
   xml.Load(url);
   return xml.InnerText;
}
4

2 に答える 2

3

文字列に改行が含まれているようです(「CALIBRATION GROUP EXPLANATION」の直後)。これはタグで HTML エンコードされます。ただし、 のサーバー側評価ではGList.Value、 によってエスケープされない改行に変換されますHtmlEncode

このため、結果の JS の文字列リテラルに改行があります。これは無効です。

サーバー タグを削除し、Javascript を次のように変更します。

<script type="text/javascript">
    $(document).ready(function () {
        displayGageInfo($('#Glist').val());
    });
</script>

これにより、コード ブロックで文字列リテラルを動的に生成する厄介な作業が回避され、クライアント側のコードがクライアント側の処理に関与できるようになります。

さらに、インライン コードの実行が遅すぎて、非表示フィールドに実際に値を入力できません。レンダリングされたマークアップを調べると、非表示フィールドがロードされた後も値がないことが予想されます。これは、イベントのPreRenderにサーバー タグが実行されるためです。これは、コントロールを変更する最後のチャンスです。ページのライフサイクルの早い段階でこのコードを実行する必要があります (試してくださいPage_Load):

<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        var reader = new GAGEmobile.Models.ReadXML();
        var data = reader.getDataFromXML("https://gagemobile-
        demo.servicebus.windows.net/gagemobile/gage/15/sample/david/blah");
        this.Glist.Value = data;
    }
</script>

AutoEventWireupまた、ページの OnLoad イベントでこのメソッドが確実に起動されるように、ページのスイッチをオンにする必要があります。

<%@ Page Language="C#" AutoEventWireup="true" %>
于 2013-06-12T19:33:28.097 に答える