0
 [WebMethod]
 public string LoadLayout()
 {
        try
        {
            List<XmlTag> lstXmlTags = new List<XmlTag>();
            lstXmlTags = parser.GetXmlTags(filePath);

            string script = "<script type=\"text/javascript\">alert(lstXmlTags );</script>";
            System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "test", script, true);

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

テスト目的で警告したいlstXmlTags.上記のコードはローカルで実行されますが、サーバーで問題が発生します.サーバーでは取得できないと思います.したがって、何が返されるか、それが空であるfilepathかを警告したいので、結果を表示するために追加します.しかし、試してみると構文エラーが発生します。使用できません。ありがとうございます。lstXmlTagsRegisterClientScriptBlockRegisterClientScriptBlock

4

4 に答える 4

0

あなたができることは次のとおりです。

  1. JavaScript 経由で Web メソッドを呼び出す
  2. Webメソッドが返されたとき、または完了したときにアラートなどを呼び出します。

詳細については、こちらを参照してください: ASP.NET Web ページでポストバックを使用せずにプログラムでクライアント コールバックを実装する

于 2013-01-11T05:38:00.153 に答える
0

あなたがやろうとしていることは、そのままでは機能しません。問題は、 を実行するalert(lstXmlTags)と、 という変数を見つけようとすることです。この変数lstXmlTagsは存在せず、発生しているエラーを説明する傾向があります。

私がすることは次のようなものです:

string lstXmlTagsText = string.Join("\n", lstXmlTags.Select(t => t.ToString()).ToArray());
string script = "<script type=\"text/javascript\">alert(" + lstXmlTagsText + ");</script>";

次に、以前と同じようにスクリプトを登録します。List<XmlTag> lstXmlTags重要なことは、オブジェクトを人間が読める形式に変換することです。ToStringそれぞれの方法でこれを行ったばかりであることに注意してください。正しくないXmlTag場合は、別の方法を使用する必要があるかもしれません。ToString

于 2013-01-11T05:59:28.670 に答える
0

クライアント側の変数とサーバー側の変数を混在させているようです。これを実現する方法の 1 つを次に示します。

[WebMethod]
public string LoadLayout()
{
    try
    {
        List<XmlTag> lstXmlTags = parser.GetXmlTags(filePath);
        var serializer = new JavaScriptSerializer();
        string json = serializer.Serialize(lstXmlTags);

        string script = string.Format("alert(JSON.stringify({0}));", json);
        System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "test", script, true);

    }
    catch (Exception ex)
    {
        throw ex;
    }
}

ここで注意すべき点:

  • JSON シリアライザー (組み込みJavaScriptSerializerクラス) を使用して、サーバー側の変数lstXmlTagsが適切にエンコードされていることを確認してから、それを cilent 側の関数に渡しました。
  • <script type="text/javascript">関数の最後のパラメーターとして true を渡したので、タグRegisterClientScriptBlockを削除しました (ドキュメントから引用します):スクリプト タグを追加するかどうかを示すブール値。したがって、これを true に設定すると、メソッドはすでにこれらのタグを追加しているので、手動で再度追加する必要はありません。
  • JSON.stringifyアラート関数内でメソッドを使用しました。このメソッドは、最新のすべてのブラウザーにネイティブに組み込まれており、javascript 変数定義を文字列に変換して、見やすい表示にすることができます。ただし、もちろん、必要に応じて変数を直接使用することもできalert({0}[1].SomeProperty);ます。コレクション内の 2 番目の要素のプロパティを表示します。

console.log注意: デバッグの目的では、いくつかのモーダル ウィンドウで警告を発するよりも、FireBug などの JavaScript デバッグ ツールを使用する方がはるかに優れています。

于 2013-01-11T06:41:12.570 に答える
0

ブレークポイントを設定して w3wp プロセスにアタッチしてデバッグすると、変数の値を確認できます。

于 2013-01-11T06:31:02.047 に答える