1

長年の読者、初めてのポスター!

Div オブジェクトを配列に追加しようとしていて、後で loadViews 関数を呼び出すときにそれらにアクセスしようとしています。すべてのアラートは適切な順序で発生しますが、配列 m_Divs の長さは常に 0 です。

そうしないと、javascriptを呼び出そうとすると、各page_loadの後に「エラー:オブジェクトが必要です」がスローされるため、Page_Loadで毎回スクリプトを再登録しています。

.JS ファイル。

var m_Divs = new Array();

function switchViews(obj) {
    alert("switchViews!");
    var div = document.getElementById(obj);
    var img = document.getElementById('img' + obj);

    if (div.style.display == "none") {
        alert("adding div" + div);
        window.m_Divs.push(div);
        alert("added");
    }
    else {}
}

function loadViews() {
    alert(window.m_Divs.length);
    for (i = 0; i < window.m_Divs.length; i++) {
        window.m_Divs[i].style.display="";
    }
}

ビューの切り替えは次の方法でトリガーされます

<a href="javascript:switchViews('div<%#Eval("ID")%>');">

GridView 内。

.CS ファイル

protected void Page_Load(object sender, EventArgs e)
{
    Page.ClientScript.RegisterClientScriptInclude("TheScript", "Scripts/TheScript.js");

    if (!Page.IsPostBack)
    {
         // Stuff.
    }
}

関連する .aspx ファイル コード

<script type="text/javascript" src="Merge.js"></script>
<body onload = "loadViews()">
  <form id="form1" runat="server">
4

3 に答える 3

0

たとえば、ClientScript の RegisterHiddenField メソッドを使用して、ポストバック間の値を保存します。

http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.registerhiddenfield.aspx

于 2011-01-25T22:57:58.073 に答える
0

JavaScript オブジェクトのページ内永続性はないため、ページをリロードするたびに (これにはポストバックが含まれます)、JavaScript の実行と設定した変数値がリセットされます。

ページの読み込み間でデータを保持したい場合は、データベースなどの永続的な場所にデータを保存する必要があります。これを行うには、サーバー側のコードを記述する必要があります。

ポストバック間でデータを保持するだけの場合は、次のことができます。

  1. @Torが提案したように、非表示フィールドにデータを保存します
  2. ポストバックを行わないようにページを変更します (Ajax を読んだり、jQuery などを使用したりします)。
  3. ASP.NET を使用UpdatePanelして部分的なページ ポストバックを実行します。これは、サーバー側のイベント ハンドラーでフォームにアクセスできることを除いて、基本的に他の Ajax メソッドと同じです (これは非効率的ですが、この場合はアクセスしない可能性があります)。注意)、JavaScript 環境はそのまま残ります。
于 2011-01-25T23:09:13.453 に答える
0

http://www.thomasfrank.se/sessionvars.html#comment158

私はこのセッション保存方法を使用することになりました。これは私が必要としていたものにはやり過ぎでしたが、うまくいきました。

RegisterHiddenField と RegisterClientScriptInclude では、Page_Load ごとに再宣言する必要があったため、毎回値がリセットされていました。そして、Ajax はこの特定のプロジェクトとの統合を好まないようです。それは .net 2.0 が新しくなったときに開始されました。ワームの他の全体の缶。

また、「div」変数ではなく、「obj」変数を配列に格納し始める必要がありました。これは、div オブジェクトが複雑すぎてそのように渡すことができないためです。

助けてくれてありがとう、私のアカウントに十分な特権があれば賛成します =)

于 2011-01-26T21:56:40.013 に答える