ASP.NETでTimerコントロールを使用したい

このQ&Aのポイント
  • ASP.NETでTimerコントロールを使用する方法について質問です。具体的には、ajaxのTimerコントロールを使ってイベントを発生させ、画面の再描画を行いたいと思っています。
  • Timerコントロールを配置して実行すると、Script controls may not be registered before PreRender.というエラーが発生します。このエラーの原因と解決策について教えてください。
  • コードの一部を示します。OnPreRenderイベント内でラベルのテキストを変更しています。しかし、エラーが発生してしまいます。どのように修正すれば正常に動作するようになるでしょうか?
回答を見る
  • ベストアンサー

ASP.NETでTimerコントロールを使用したい

ASP.NETWebアプリケーションについての質問です。 ajaxのTimerコントロールでイベントを発生させ、画面の再描画をしようとしています。 コードは以下のような感じで、OnPreRenderイベント内で描画処理を行います。 Partial Public Class _Default Inherits System.Web.UI.Page Private str As String = "" Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load str = CStr(Date.Now) End Sub Protected Overrides Sub OnPreRender( _ ByVal e As System.EventArgs _ ) Label1.Text = str End Sub End Class Timerコントロールを配置して実行したところ、 Script controls may not be registered before PreRender. というエラーが出てしまいます。 調べてみたのですが原因がわかりません。 何かプロパティの設定などが必要なのでしょうか? aspx のコードは以下のとおりです。 <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebApplication5._Default" %> <%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TagPrefix="asp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>無題のページ</title> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" ></asp:ScriptManager> <asp:Timer ID="Timer1"runat="server"></asp:Timer> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Labe> l </form> </body> </html> 回答よろしくお願いいたします。

  • AJAX
  • 回答数1
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

OnPreRenderはイベントではありません。 PreRenderイベントの記述 Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender

izumi00
質問者

お礼

回答ありがとうございます。 OnPreRenderはPreRenderイベントを発生させているんですね。 勉強不足でした。 PreRenderイベント内に描画処理を記述することで解決しました。 ありがとうございました。

関連するQ&A

  • UpdatePanel と GridViewについて教えてください

    現在、ASP.NET(VB)にて開発を行っています。今悩んでいる事は GridView内でUpdatePanelを使用した際にエラーが表示されます。 エラー内容は下記の通りです。 InvalidCastException はユーザーコードによってハンドルされませんでした。 ______________________________________________________________________ 型 'System.Web.UI.UpdatePanel' のオブジェクト型 'System.Web.UI.WebControl.GridViewRow' にキャストできません。 どなたか、エラーの対処方をご存知の方がいらっしゃいましたらご指導宜しくお願いします。なお、ソースは下記の様に記述してみました。 <%@ Page Language="VB" %> <%@ Import Namespace="System.Data.SqlClient" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Dim txt As TextBox = DirectCast(sender, TextBox) Dim row As GridViewRow = DirectCast(txt.Parent.Parent, GridViewRow) CD.Text = txt.Text End Sub </script> <html> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="SM" runat="server"> </asp:ScriptManager> <asp:TextBox ID="CD" runat="server" Width="50px"></asp:TextBox> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="CD" DataSourceID="Source" ShowFooter="True"> <Columns> <asp:TemplateField HeaderText="CD"> <ItemTemplate> <asp:Label ID="lbl" runat="server" Text='<%# Bind("CD") %>'></asp:Label> </ItemTemplate> <FooterTemplate> <asp:UpdatePanel ID="UP" runat="server"> <ContentTemplate> <asp:TextBox ID="NewCD" runat="server" AutoPostBack="True" OnTextChanged="TextChanged" Width="50px"></asp:TextBox> </ContentTemplate> </asp:UpdatePanel> </FooterTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="Source" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionStrings %>" SelectCommand="SELECT * FROM [TABLE]" ProviderName="System.Data.SqlClient"> </asp:SqlDataSource> </form> </body> </html>

  • SqlDataSource1のドロップダウンリストにページロード時に値

    SqlDataSource1のドロップダウンリストにページロード時に値をいれたいのですが どのようにしたらいいのでしょうか? SqlDataSource にDropDownList1と同じ内容のデータベース 1 りんご 2 みかん 3 ぶどう でページロード時3を指定しているようにしたいのですが 下記ではDropDownList1はできるのですがSqlDataSourceを使っているDropDownList2 では 項目一覧に存在しないため、'DropDownList2' に SelectedValue を指定することは無効です。 パラメータ名: value というエラーがになってしまいます。 どうしたらできるでしょうか? <%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) DropDownList1.Text = "3" DropDownList2.Text = "3" End Sub </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>無題のページ</title> </head> <body> <form id="form1" runat="server"> <div> <asp:DropDownList ID="DropDownList1" runat="server"> <asp:ListItem>りんご</asp:ListItem> <asp:ListItem>みかん</asp:ListItem> <asp:ListItem>ぶどう</asp:ListItem> </asp:DropDownList> <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource1" DataTextField="MyLike" DataValueField="NO"> </asp:DropDownList> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" SelectCommand="SELECT [NO], [MyLike] FROM [MyLike]"></asp:SqlDataSource> </div> </form> </body> </html>

  • <ASP>にTextBoxの値を設定する方法

    TextBoxに記述されたDB接続文字列を<ASP>内で設定しようと試みておりますが、失敗します。どのように記述を改めればよろしいでしょうか? ----------------- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebForm1" %> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { TextBox1.Text = Application["DB_CON_STRING"].ToString(); } </script> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>無題のページ</title> </head> <body> <form id="form1" runat="server"> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <div> </div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1"> <Columns> <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" /> <asp:BoundField DataField="DATETIME" HeaderText="DATETIME" SortExpression="DATETIME" /> <asp:BoundField DataField="MESSAGE" HeaderText="MESSAGE" SortExpression="MESSAGE" /> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="form1.TextBox1.Text"★ここがうまくいかない★ SelectCommand="SELECT * FROM TEST ORDER BY ID DESC"></asp:SqlDataSource> </form> </body> </html>

  • yahoo API ASP.NETで表示させるには

    お世話になります 環境 Windowsxp pro asp.net vb ACCESS(テーブル) 超初心者 Yahoo APIですが下記を参考中に作成しています http://www.atmarkit.co.jp/fdotnet/dotnettips/477 aspx-------------------------------------------------------------- <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default6.aspx.vb" Inherits="loop_Default6" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>webAPI</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="txtKeyword" runat="server"></asp:TextBox> <asp:Button ID="btnSearch" runat="server" OnClick="btnSearch_Click" Text="検索" /> <br /> <asp:BulletedList ID="list" runat="server" DataSourceID="Xml" DataTextField="Title" DataValueField="Url" DisplayMode="HyperLink"> </asp:BulletedList> <asp:XmlDataSource ID="Xml" runat="server" DataFile="http://search.yahooapis.jp/WebSearchService/V2/webSearch?appid=自分のID&query=apiとは?&results=20" TransformFile="~/App_Data/YahooSearch.xsl"></asp:XmlDataSource> <br /> </div> </form> </body> </html> aspx.vb Partial Class loop_Default6 Inherits System.Web.UI.Page Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click Xml.DataFile = _ "http://search.yahooapis.jp/WebSearchService/V2/webSearch?appid=自分のID&query=" _ & Server.UrlEncode(txtKeyword.Text) & "&results=50" End Sub End Class xsl--------------------------------------------- <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:yahoo="urn:yahoo:jp:srch" version="1.0"> <xsl:template match="/yahoo:ResultSet"> <ResultSet> <xsl:for-each select="yahoo:Result"> <Result> <xsl:attribute name="Title"> <xsl:value-of select="yahoo:Title" /> </xsl:attribute> <xsl:attribute name="Url"> <xsl:value-of select="yahoo:Url" /> </xsl:attribute> </Result> </xsl:for-each> </ResultSet> </xsl:template> </xsl:stylesheet> -------------------------------------------- 現在は表示ぐらいまでならできました これをyahooオークションで転用したいのですが ASP.NETでググってもあまりHITしません 分かる方初心者ですがご教授願います

  • FormViewのEditItemTemplateに配置したボタンへのjavascript組み込み

    はじめまして セバといいます。 VBでaspxを利用しシステムを開発していますが、 次のような現象が発生し困っています。 仕様 1.FormviewのItemTemplateに配置している「edit_Chage」ボタンで FormviewをEditmodeに変更します。 2.FormviewのEditItemTemplateには「hello」ボタンを配置し、 ボタン押下時にjavascriptを起動します。 問題点 FormviewのFormView1_ModeChangedにてイベントを拾い、 「hello」ボタンにjavascriptを組み込もうとしていますが、 この時点では「hello」ボタンのインスタンスが生成おらず、 『オブジェクト参照がオブジェクト インスタンスに設定されていません。』 のエラーになってしまいます。 サンプルプログラム /////////////////////////////// Default.aspx <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "​http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">​ <html xmlns="​http://www.w3.org/1999/xhtml">​ <head runat="server"> <title>無題のページ</title> </head> <body> <form id="form1" runat="server"> <div> </div> <asp:FormView ID="FormView1" runat="server" DataSourceID="SqlDataSource1"> <EditItemTemplate> tmp1: <asp:TextBox ID="tmp1TextBox" runat="server" Text='<%# Bind("tmp1") %>' /> <asp:Button ID="Button1" runat="server" Text="hello" /> <br /> <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" Text="更新" /> &nbsp;<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="キャンセル" /> </EditItemTemplate> <InsertItemTemplate> </InsertItemTemplate> <ItemTemplate> tmp1: <asp:Label ID="tmp1Label" runat="server" Text='<%# Bind("tmp1") %>' /> <br /> <asp:Button ID="Button2" runat="server" CommandName="edit" Text="edit_Chage" /> </ItemTemplate> </asp:FormView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" SelectCommand="SELECT [tmp1] FROM [tmpTBL]"> </asp:SqlDataSource> </form> </body> </html> /////////////////////////////// Default.aspx.vb Partial Class _Default Inherits System.Web.UI.Page Protected Sub FormView1_ModeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormView1.ModeChanged '「Hello」ボタンへのjavascript組み込み If FormView1.CurrentMode = FormViewMode.Edit Then Dim btn As Button btn = CType(FormView1.FindControl("Button1"), Button) Dim sbScript As New System.Text.StringBuilder() sbScript.Append("alert('Hello')") btn.Attributes("onclick") = sbScript.ToString() End If End Sub End Class //////////////////////// また、 「Hello」ボタンのインスタンスを強制的に作ろうと、 Default.aspx.vbにFormView1.DataBind()を組み込みましたが、 インスタンスは生成されたものの、 onclickタグは生成されませんでした。 If FormView1.CurrentMode = FormViewMode.Edit Then Dim btn As Button FormView1.DataBind() <--- ここに追加 btn = CType(FormView1.FindControl("Button1"), Button) EditItemTemplateに配置したボタンにプログラムでjavascriptを組み込みたいのですが、 どなたか解決方法をご存知な方がいましたら、ご教示願いします。

  • 【ASP.NET】 ログインコントロールにおいて

    おせわになります。 Visualstudio 2005 のASP.NET VB でWEBサイトを作成しております。 ASP.NET  で ログインコントロールを使って、認証ページを作っているのですが。 ID PASSWORD この2つのIDをログインコントロール内で、使用しているのは分かるのですが、 このIDに加え ID 名前 PASSWORD という3つのデータによって、ログイン制御を行いたいと考えております。 ログインコントロール内で、テーブルを追加して、「名前」を増やした所、 このIDをVB.NET側で、受け取れません。 ASP.NET 側の ログインコントロールのソースは /////// ここからが問題の箇所 ///////////// <tr> <td align="right" style="height: 24px; width: 149px;"> <asp:Label ID="Label2" runat="server" AssociatedControlID="USERID">ID: </asp:Label></td> <td style="height: 24px; width: 312px;"> <asp:TextBox ID="USERID" runat="server" MaxLength="5" OnTextChanged="USERID_TextChanged" Width="152px"> </asp:TextBox> <asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="USERID" ErrorMessage="ユーザーIDは5文字以下にしてください。" ToolTip="ユーザーIDは10文字以下にしてください" Type="String" ValidationGroup="Login1">*</asp:RangeValidator> </td> </tr> /////// ここまでが問題の箇所 //////////// /////// ここからは通常に起動 ///////////// <tr> <td align="right" style="height: 24px; width: 149px;">  <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">氏名(カナ):</asp:Label></td> <td style="height: 24px; width: 312px;"> <asp:TextBox ID="UserName" runat="server" Width="152px" OnTextChanged="UserName_TextChanged" MaxLength="10"> </asp:TextBox> <asp:RangeValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName" ErrorMessage="ユーザー名は10文字以下にしてください。" Type ="String" ToolTip="ユーザー名は10文字以下にしてください" ValidationGroup="Login1"> *</asp:RangeValidator> </td> </tr> <tr> <td align="right" style="height: 29px; width: 149px;"> <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">パスワード: </asp:Label> </td> <td style="width: 312px; height: 29px;"> <asp:TextBox ID="Password" runat="server" TextMode="Password" Width="152px"> </asp:TextBox> <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password" ErrorMessage="パスワードが必要です。" ToolTip="パスワードが必要です。" ValidationGroup="Login1"> * </asp:RequiredFieldValidator> </td> </tr> <tr> <td align="center" colspan="2" style="color: red"> <asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal> </td> </tr> VB.NET 側では以下のスクリプトで指定しています。 Protected Sub LoginButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Login1.LoggedIn ////////// 受け取れない ////////////////// Dim strID As String = Login1.UserID.ToString ////////// 受け取れる ////////////////// Dim strID As String = Login1.UserName.ToString ////////// 受け取れる ////////////////// Dim strID As String = Login1.Password.ToString このように、LOGIN コントロールに UserIDを追加できません。 よって、session などに、 UserID のVALUE を受け取れるようにしたいのですが、 asp.net側の 設定はどのようにしたらよろしいのでしょうか。 ログインコントロールは あきらめて、通常の独自の認証システムを作るべきですかね。 ログインコントロールに 通常のテキストボックスとして、追加はできないものでしょうか。 どなたかご存知の方、いらっしゃいましたら、教えていただけますと幸いです。 どうぞ宜しくお願いいたします。

  • ASP.netのエラー 2005から2008への移行

    パーサー エラー メッセージ: 基本クラスに 'sman' という名前のフィールドが含まれていますが、その型 (System.Web.UI.ScriptManager) はコントロール (System.Web.UI.ScriptManager) の型と互換性がありません。 <asp:ScriptManager ID="sman" runat="server" > visualstudio2005から2008へ移行(ウィザードを使用)したのですが、実行すると上記のようなエラーが出てしまいます。visualstudio2005では問題なく動作しておりました。 その型System.Web.UI.ScriptManagerは コントロールのSystem.Web.UI.ScriptManagerと 互換性がないとのことですが、 同じ型なのに、どうしてこのようなエラーが出てしまうのでしょうか?

  • 【ASP.NET】フォームの継承は出来ますか?

    ASP.NETで似たような画面を複数作るにあたって、 フォーム(デザイン?)の継承が出来たらなぁと思っています。 C#(当方、C#の経験しかありません(--;) )ですと Form1にButtonコントロールを貼り付けて、Form2からForm1を継承すると Form1のButtonコントロールを継承出来ますよね。(デザイナ上も表示される) ASP.NETでもそういったことが出来ないでしょうか? 現在、下のような状態です。 no2からno1を継承しようとしています。 違うんだろうなということは分るのですが インターネットで調べても分からないので 「こんな感じだろ!」という独断と偏見で作りました…^^; ======================================= 【 no1.aspx 】 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="no1.aspx.cs" Inherits="xxx.no1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>無題のページ</title> </head> <body> <form id="form1" runat="server"> <div> <!-- ボタンを貼ってみました --> <asp:Button ID="Button1" runat="server" BackColor="#FFC0FF" BorderColor="Blue" Text="Button" /> </div> </form> </body> </html> 【 no2.aspx 】 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="no2.aspx.cs" Inherits="xxx.no1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>無題のページ</title> </head> <body> <form id="form1" runat="server"> <div> <!-- Inheritsに"xxx.no1"と記述したので、no1で貼ったボタンが表示されたら嬉しい… --> </div> </form> </body> </html> ======================================= えー…、no2を実行しても真っ白画面でした。 出来れば継承したものがno2のデザイナ上にも表示されて欲しいのですが…。 また 「そういう方法はないけど、こういう方法ならあるよ」 や 「ASP.NETで似たような画面を複数作る場合は普通こうするんだよ」 ということがあれば教えて頂けたらなと思います。 よろしくお願い致します。

  • System.Timers.Timer について

    下記のようなコードで動いていますが、 TestFunc に独自の引数を渡したいと考えています。 どうすれば実現できるでしょうか? 引数以外(メンバ変数等)では対応できていますので、 引数の方法だけ教えてほしいです。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load timer = New System.Timers.Timer() AddHandler timer.Elapsed, New ElapsedEventHandler(AddressOf TestFunc) timer.Interval = 1000 timer.Start() End Sub Public Sub TestFunc(ByVal sender As Object, ByVal e As ElapsedEventArgs) Console.WriteLine(DateTime.Now) End Sub

  • EmptyDataTemplateを再表示

    EmptyDataTemplateのラベル値を画面のLinkButtonのクリック時に変更したいと思っています。 LinkButtonのクリック時に以下の通り記述することで、値はセットされているのですが、 画面上で再表示されません。 UpdatePanelでトリガーも設定しているのですが、どうすればよいでしょうか? <サーバー側> Protected Sub btnON_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnON.Click If grdList.Rows.Count = 0 Then CType(grdList.Controls(0).Controls(0).FindControl("emptyName"), Label).Text = "説明A" End If End Sub <クライアント側> <asp:LinkButton ID="btnON" runat="server"><asp:Label ID="lblON" Text="ボタン1" runat="server" /></asp:LinkButton> <div id="Data" runat="server"> <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:GridView ID="grdList" runat="server" ~省略~ > <%-- データがない場合 --%> <EmptyDataTemplate> <table > <tr> <th><asp:Label ID="emptyNo" Text="NO" runat="server" /></th> <th><asp:Label ID="emptyName" Text="説明○" runat="server" /></th>   ☆ここの値 </tr> </table> </EmptyDataTemplate> <Columns> ~データ表示省略~ </Columns> </asp:GridView> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="btnON" EventName="Click" /> </Triggers> </asp:UpdatePanel> </div>

専門家に質問してみよう