C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: カレンダの日付クリックでConfirmを表示したい


(過去ログ 90 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■53381 / inTopicNo.1)  カレンダの日付クリックでConfirmを表示したい
  
□投稿者/ akira (9回)-(2010/09/11(Sat) 19:48:03)

分類:[ASP.NET (VB)] 

質問させてください。
カレンダの今日の日付をクリックした時だけ、Confirmを表示して、次の処理に進みたい
のですが、Confirmの表示方法がわからなくて困っております。解決のアドバイス頂ける
と助かります。よろしくお願いします。

↓このページを参考にボタンをクリックするとConfirmを表示させる方法はわかりました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/015confirm/confirm.html
しかし、カレンダの今日の日付をクリックした時だけ、Confirmを表示して、次の処理に
進む方法がわかりません。以下の小さなコードを書いて機能を確認しています。
開発環境:VWD2008 VB

<%@ 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)
        'ページを初期化するユーザー コードをここに挿入します。
        Button1.Attributes("onclick") = "return confirm('本当に移動しますか?');"
        Calendar1.Attributes("OnSelectionChanged") = "return confirm('カレンダ本当に移動しますか?');"
    End Sub
    
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Response.Redirect("http://www.atmarkit.co.jp/fdotnet/")
    End Sub

    Protected Sub Calendar1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        If Calendar1.SelectedDate.ToString("yyyy/MM/dd") = Now().ToString("yyyy/MM/dd") Then
            Response.Redirect("http://www.atmarkit.co.jp/fdotnet/")
        Else
            TextBox1.Text = Calendar1.SelectedDate.ToString("yyyy/MM/dd")
        End If
    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:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        <br />
        <br />
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        <asp:Calendar ID="Calendar1" runat="server" OnSelectionChanged="Calendar1_SelectionChanged"></asp:Calendar>
        <br />
    
    </div>
    </form>
</body>
</html>

引用返信 編集キー/
■53390 / inTopicNo.2)  Re[1]: カレンダの日付クリックでConfirmを表示したい
□投稿者/ もりお (279回)-(2010/09/11(Sat) 23:56:57)
No53381 (akira さん) に返信

> Calendar1.Attributes("OnSelectionChanged") = "return confirm('カレンダ本当に移動しますか?');"

SelectionChanged イベントは Calendar コントロールのサーバー側での
イベントです。
クライアント側では処理されないため他のやり方を考える必要があります。

ブラウザでページのソースを見ていただくとわかるのですが、
Calendar コントロールは table タグとして出力されます。
各日付は a タグとして出力されます。

日付の a タグに confirm のスクリプトを登録するとよいかと思います。a タグをコードで
取得する手立てはなさそうなので Cell の中身を入れ替える作戦でいかがでしょうか。

Protected Sub Calendar1_DayRender(ByVal sender As Object, ByVal e As DayRenderEventArgs) Handles Calendar1.DayRender
  If e.Day.IsToday Then
    e.Cell.Controls.Clear()
    e.Cell.Controls.Add(createTodayLink(e))
  End If
End Sub

Protected Function createTodayLink(ByVal e As DayRenderEventArgs) As HtmlAnchor
  Dim TodayLink As New HtmlAnchor()
  TodayLink.HRef = e.SelectUrl
  TodayLink.InnerText = e.Day.DayNumberText
  TodayLink.Title = e.Day.Date.ToString("m", CultureInfo.CurrentCulture)
  TodayLink.Attributes("onclick") = "return confirm('まじで移動しますか?');")
  Return TodayLink
End Function

引用返信 編集キー/
■53395 / inTopicNo.3)  Re[2]: カレンダの日付クリックでConfirmを表示したい
□投稿者/ akira (10回)-(2010/09/12(Sun) 09:18:54)
No53390 (もりお さん) に返信
> ブラウザでページのソースを見ていただくとわかるのですが、
> Calendar コントロールは table タグとして出力されます。
> 各日付は a タグとして出力されます。
> 
> 日付の a タグに confirm のスクリプトを登録するとよいかと思います。a タグをコードで
> 取得する手立てはなさそうなので Cell の中身を入れ替える作戦でいかがでしょうか。

もりおさん、早急に的確なアドバイス本当にありがとうございます。
目的通りの動作が出来る様になりました。感謝です。
今回、ASP.NETが生成するhtmlをながめてみる。と言うワザを覚えました。

目的通り動くようになったコードを添付しておきます。
<%@ 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 Calendar1_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs)
        If e.Day.IsToday Then
            e.Cell.Controls.Clear()
            e.Cell.Controls.Add(createTodayLink(e))
        End If
    End Sub
    
    Protected Function createTodayLink(ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) As HtmlAnchor
        Dim TodayLink As New HtmlAnchor()
        TodayLink.HRef = e.SelectUrl
        TodayLink.InnerText = e.Day.DayNumberText
        TodayLink.Title = e.Day.Date.ToString("m", Globalization.CultureInfo.CurrentCulture)
        TodayLink.Attributes("onclick") = "return confirm('本当に移動しますか?');"
        Return TodayLink
    End Function

    Protected Sub Calendar1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        If Calendar1.SelectedDate.ToString("yyyy/MM/dd") = Now().ToString("yyyy/MM/dd") Then
            Response.Redirect("http://www.atmarkit.co.jp/fdotnet/")
        Else
            TextBox1.Text = Calendar1.SelectedDate.ToString("yyyy/MM/dd")
        End If
    End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <br />
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        <asp:Calendar ID="Calendar1" runat="server" OnSelectionChanged="Calendar1_SelectionChanged" OnDayRender="Calendar1_DayRender"></asp:Calendar>
        <br />
    
    </div>
    </form>
</body>
</html>

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -