0

データベースから情報をロードする asp.net サイト (C# バックエンド) があります。ユーザーは、追加/削除ボタンをクリックして情報を保存できます。このボタンは、ユーザーが保存したかどうかに基づいて動的に変化します。コマンド名と引数を使用してデータを渡しています。ボタンが押されると、同じページにとどまり、外観を更新するだけです (ポストバックを行います)。これは、通常の状況ではうまく機能しています。ただし、ユーザーがページから移動してからページに戻ると、押されたボタンの OnClick メソッドが再実行されます。

戻るボタンを使用するとポストバックを実行していることはわかっていますが、最後の onclick が発生するのはなぜですか? これは正常な動作ですか?キャッシュを無効にして、ページを期限切れにしようとしましたが、すべてが機能しません。データはリピーターに表示され、ViewState が有効になっています...私が読んだことから、それが原因かどうか疑問に思っています。ただし、ViewState が無効になっていると、ポストバックに結果が表示されません。それが問題である場合、Viewstate を使用せずに Repeater でデータを動的に更新する他の方法はありますか? 参考になるかわかりませんが、コマンド名と引数を示すボタンのマークアップを以下に示します。

<asp:Repeater ID="ItemRepeater" runat="server" EnableViewState="true">
    <!--Lots of other code before pressed button-->
    <asp:Button ID="additembutton" runat="server" OnClick="AddDelOnClick" Text='<%# textToDisplay((int)Eval("isSaved")) %>'
     CommandName='<%# DataBinder.Eval(Container.DataItem, "isSaved").ToString().Trim() %>' 
     CommandArgument='<%# DataBinder.Eval(Container.DataItem, "itemnumber").ToString().Trim() + "~" +
       DataBinder.Eval(Container.DataItem, "department").ToString().Trim() + "~" +
       DataBinder.Eval(Container.DataItem, "itemdescription").ToString().Trim() + "~" +
       DataBinder.Eval(Container.DataItem, "isSaved").ToString().Trim()%>'
     CssClass='<%# cssClassToDisplay((int)Eval("isSaved")) %>' /></td></tr>
4

2 に答える 2

1

私は「通常の行動」で行きます。これは常に私にとって厄介であり、私の非常にエレガントな解決策は、ポストバックを UpdatePanel にラップすることです...これは他の問題やニーズにつながりますが、少なくとも戻るボタンは何もトリガーしません。エンド ユーザーを管理するため。

    <asp:ScriptManager id="smPage" runat="server"/>

    <asp:UpdatePanel id="upPnlRepeater" runat="server">
        <ContentTemplate>
            <asp:Repeater id="YourRepeater">
            </asp:Repeater>
        </ContentTemplate>
    </asp:UpdatePanel>
于 2013-10-04T18:24:00.727 に答える
0

すぐにこれを手に入れました...質問する前にもう少しだけ持ちこたえるべきでした. かわった:

CommandName='<%# DataBinder.Eval(Container.DataItem, "isSaved").ToString().Trim() %>'

CommandName='AddorDelete'

コマンド引数のみを変更するようにバックエンド コードを変更しました。

于 2013-10-04T19:05:45.697 に答える