1

私のシナリオは、ユーザーがページ上の 12 の異なるアイテムをクリックすることができ、クリックしたアイテムに応じて、div にテキストが入力されることです。これを行う良い方法は、12 の異なる AJAX 呼び出しを実行するのではなく、最初の要求ですべての異なるテキスト文字列をクライアントに渡すことだと考えていました。とにかくテキスト文字列が長くないので、初期ロード時間でクライアントをフロントロードする方が良いと考えました。

私が理解しようとしているのは、C# コード ビハインドに javascript ディクショナリ/ハッシュテーブルを記述し、ロード時にページに渡す最良の方法です。これを行う最良の方法は何ですか?

4

6 に答える 6

1
protected void btnHey_Click(object sender, EventArgs e)
{
 StringBuilder sb = new StringBuilder();

 sb.Append("<script language='javascript'>alert('HEY');</script>");

 // if the script is not already registered

 if (!Page.ClientScript.IsClientScriptBlockRegistered(Page.GetType(), "HeyPopup"))

      ClientScript.RegisterClientScriptBlock(Page.GetType(), "HeyPopup", sb.ToString());
}

これを見ることができますhttp://www.dreamincode.net/forums/topic/185586-aspnet-calling-javascript-from-code-behind/お役に立てば幸いです...

于 2012-11-01T13:21:16.133 に答える
1
  • 12 個の隠し div を作成し、それらに HTML を入力して、ユーザーがクリックした内容に応じて適切な div を表示できます。

  • 次のように、Dictionary オブジェクトを JavaScript オブジェクト リテラルに変換できます。

var pageContent = {
    button1: "some content",
    button2: "some other content"
    // ...
};

System.Runtime.Serialization.Json Namespacethis answer for codeをご覧ください。次に、クリックされたボタンに応じてコンテンツを div に入力できます。

于 2012-11-01T13:13:28.097 に答える
1

クライアントの観点からは、基本的に次の 2 つの選択肢があります。

  1. ページの読み込み時に AJAX 呼び出しをトリガーして、データを非同期的に取得します。(Sjoerdの回答を参照)
  2. ASP を取得して、データを HTML / JavaScript に直接プッシュします。(Ewerton / Scorpioの回答を参照)

ASP で JS を動的に生成することに抵抗がある場合は、データを含むスクリプト タグを出力するように設定することもできます。

<script type="text/json" id="strings">
     <asp:Literal runat="server" ID="JavascriptData" />
</script>

プロデュース:

 <script type="text/json" id="strings">
     { "div1" : "First String",
       "div2" : "Second String",
       "etc" : "And so on" }
 </script>

次に、JavaScript でデータを読み取ります。

var json = document.getElementById('strings').InnerHTML;
var strings = JSON.Parse(json);
于 2012-11-01T13:29:36.773 に答える
0

ScriptManager.RegisterStartupScriptがトリックを実行します

于 2012-11-01T13:12:33.120 に答える
0

このような問題を自分で解決するために、JSONを返すHttpHandlerを作成しました。

public class JsonData : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
        var json = serializer.Serialize(GetData());
        context.Response.ContentType = "application/json";
        context.Response.Write(json);
    }
}

ASPXのJavascriptでは、jQueryを使用してデータを取得します。

$.getJSON("/JsonData.ashx", null, function (data) { ... });

これは、ASPXファイルがデータを含む2番目のファイルを取得するという点で、実際には帯域外ソリューションです。

私も時々見るものはこのようなものです:

<script>
    var myData = '<asp:Literal runat="server" ID="JavascriptData" />';
</script>

次に、JavascriptDataがコードビハインドに入力されます。私はこの方法があまり好きではありませんが、簡単でうまくいきます。引用符をエスケープすることを忘れないでください。

于 2012-11-01T13:18:31.547 に答える
0

You can store your html content in a string format in hidden fields, or you can populate 12 separate divs from your server side code. Then write some javascript to show-hide divs based on the button clicks.

于 2012-11-01T13:23:41.087 に答える