基本的に、UpdatePanelには、分離コード内のメソッドに基づいてJavaScript配列を生成するリテラルがあります。
ページの読み込み時にコンテンツを読み込む場合、問題はありません。しかし、updatepanel内でJavaScript配列リテラルを更新するための検索を実行しようとすると、JavaScriptがすでに起動した後、ポストバックでリテラルが更新されることがわかりました。
ここに私が持っているものの基本的な例があります:
<script type="text\javascript">
function BindMyFunction(itemList)
{
//Do something
}
</script>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<!-- Literal containing generated JS array -->
<asp:Literal ID="ProfileJavscriptOutput" runat="server"></asp:Literal>
<ul id="person-search">
<li><asp:TextBox ID="TxtFirstname" runat="server" Text=""></asp:TextBox></li>
<!-- Update Literal onClick -->
<li><asp:ImageButton CssClass="searchbtn" ID="ImageButton1" runat="server" OnClick="ImageButton1_Click" /></li>
</ul>
<!-- Some jCarousel rendered -->
</asp:UpdatePanel>
私は以下の投稿を見てきました:
ASP.NET-UpdatePanelおよびJavaScript
pdatepanelポストバック後にjavascriptを呼び出す
しかし、それをコードに正しく適用できないようです。
UpdatePanelを使用しない場合は問題ありません。ただし、検索時にページ位置が移動しないようにするための要件です。
次のコードをPage_Loadイベントに追加できます。
ScriptManager.RegisterStartupScript(Me.rptGridAlbum, rptGridAlbum.GetType, "scriptname", "somejavascript", True)
これにより、AJAXコールバックの後にページのJavaScriptが起動します。
必要なときにいつでもJavaScript配列をページに返す単純なWebサービスメソッドを作成し、そのWebサービスの呼び出しをJavaScriptメソッドでラップすることができます。ブラウザ側でメモリ内の配列を更新するためにjavascriptメソッドを呼び出すと、js配列リテラルがUpdatePanel
ポストバックで再度解析されて成功することを期待するよりもうまく機能します。
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm != null) {
prm.add_endRequest(function (sender, e) {
if (sender._postBackSettings.panelsToUpdate != null) {
DisplayCurrentTime(); // here your javascript function
}
});
};