解決済み
質問を解決するように設定するにはどうすればよいですか?笑
とにかくここに解決策があります、私は私の友人に私を助けてもらいました、そして彼はそれをしました!
最初に、私が更新パネルを使用していたので、jQueryはそれからの部分的なポストバックを登録しませんでした。それが主な問題でした。更新パネルなしで機能しなかった理由の少し少ない問題は、クリック時の関数の1と0の値が誤って交換されたことでした。
したがって、最初にOnInitメソッドをオーバーライドしましたが、同じコードをページロードに配置することもできます(initコードofcに基づく呼び出しを除く):):
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
prikazi.Attributes.Add("onclick", "return LinkKlik();");
ScriptManager.RegisterStartupScript(this, this.GetType(), "init", "checkComponent();", true);
}
非同期ポストバックがある場合でも、ページが再初期化されるたびに実行するスクリプトを登録します:)ここでも、リンクボタンにクリック関数を追加します。
jqueryコードは次のとおりです。
function checkComponent() {
//
if (document.getElementById('hidTracker').value == '1') {
$(".sokrij").show();
}
else {
$(".sokrij").hide();
}
}
function LinkKlik() {
var panel = $("#fioka").find(".sokrij");
if (panel.is(":visible")) {
panel.slideUp("500");
$('#hidTracker').attr("value", "0");
}
else {
panel.slideDown("500");
$('#hidTracker').attr("value", "1");
}
// that's it folks! (return false to stop the browser jumping the the '#' link
return false;
}
これは基本的に以前と同じですが、上記のオーバーライドによってイベントにリンクされた2つの関数に分割されています。
最後に、これらが必要です。
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<script type="text/javascript" src="drawer.js"></script>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
<asp:HiddenField ID="hidTracker" runat="server" Value="0" />
<div id="fioka">
<asp:LinkButton runat="server" href="#" ID="prikazi">Click This to show/close</asp:LinkButton>
<div class="sokrij" id="sokrij">
HIDE THIS!!!
</div>
</div>
<asp:Button ID="Button1" runat="server" Text="Button" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="prikazi" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
更新パネル内でも機能します。ボタンはポストバックを生成するためにあり、更新パネルの外側に実際のポストバックを生成するためにボタンを外側に配置することもできます。状態の値は非表示フィールドに記録され、リンクボタンは表示/非表示に使用するものです。誰かがこれを必要とするなら、乾杯。同じことについてたくさんの投稿を見たが、誰もそれに答えなかったから。
答えてくれてありがとう、特にCRAB BUCKET
可能であれば、すべて+ repを指定しますが、開始したばかりであることがわかります。
ポストバックを行うさまざまな要素を持つコントロールがあります。更新パネルのメインページにそのコントロールがあり、うまく機能します。私がやりたいのは、要素の半分を非表示にし、ボタンがクリックされたときにのみ表示できるようにすることです。いくつかのjQueryドロワーを見つけることができましたが、問題はありませんでしたが、パネルを開いて、クリックまたは値の変更時にac#関数を呼び出すようにポストバックのある要素を変更すると、ドロワーが開きます([ドロワーを開く]リンクを押しても) )。
私の要素にはポストバックが必要です!そして私はそれらの半分を隠すためにその引き出しのshow/hidethingieが必要です...
これが私がこれまでに引き出しに持っていたもので、自分でいくつかのコードをまとめています。このコードで言ったように、ポストバックの原因となるボタンをクリックすると、開いているドロワーのリンクをクリックしなくても、ポストバックの後にドロワーが開きます。それ以外はポストバック間で問題なく動作しますが、ポストバックでも動作させる必要があります。
$(function () { $(".sokrij").hide(), $("#prikazi").live("click", function (evt) { evt.preventDefault(); $("#fioka").find(".sokrij").each(function () { if ($(this).is(":visible")) { $(this).slideUp("500"); } }); if ($(this).next().is(":hidden")) { $(this).next().slideDown("500"); } return false; }); });
ポストバックが引き出しの状態に影響を与えないようにする方法が必要です。開いている場合はポストバック後も開いたままにし、閉じている場合はポストバック後も閉じたままにします。つまり、状態を記憶し、ポストバックのたびに確認する必要があるということです。
これが私のタグ構造です。
<div id="fioka"> <a href="#" ID="prikazi">Click This to show/close</a> <div class="sokrij"> </div> </div>
主な編集:
Crab Bucketからの入力後、私が今持っているものは次のとおりです。
タグ構造:
<input type="hidden" ID="hidTracker" value="0" /> <div id="fioka"> <a href="#" ID="prikazi">Click This to show/close</a> <div class="sokrij"> </div> </div>
これはすべて、ポストバックを生成するボタンがある更新パネル内にありますが、これらのポストバックはメインページを更新せず、更新パネル内に含まれています。
そしてjQueryコードはこれまでのところ:
$(document).ready(function () { if ($('#hidTracker').val() == '1') { $(".sokrij").show(); } else { $(".sokrij").hide(); } $("#prikazi").live("click", function (evt) { evt.preventDefault(); var panel = $("#fioka").find(".sokrij"); if (panel.is(":visible")) { panel.slideUp("500"); $('#hidTracker').val('1'); } else { panel.slideDown("500"); $('#hidTracker').val('0'); } return false; }); });
したがって、現在は次のように機能します。サイトの読み込み時に、パネル(引き出し)が閉じていることが表示されます。リンクをクリックしてパネルを表示/非表示にすると、すばらしい動作をします。ただし、ボタンの1つがポストバックを生成した後、パネルが更新され、ポストバックが生成されるたびにOPENと表示されます。ポストバック後も、開閉リンクを使用して開閉できますが、これはうまく機能しますが、ポストバック前のパネルの状態を保存し、ポストバック後の状態に設定する方法が必要です。
非表示フィールドで提供されるコードクラブバケットはそれでも機能するはずですが、機能しません。ポストバック後にパネルが開いているか閉じているかを確認する方法が必要だと思います。チェックはページの読み込み時にのみ行われ、ポストバック後は行われません!!!