0

私はこの Default.aspx.cs を持っています

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Xml;
using System.IO;


public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        Calendar1.SelectedDate = DateTime.Today;
        info.Visible = false;
        meeting.Visible = true;
        member.Visible = true;
        label.Visible = true;
    }

    protected void Button3_Click(object sender, EventArgs e)
    {
        DateTime Now = DateTime.Today;
        DateTime wed1 = getFirstWednesdayOfMonth(Now);
        DateTime wed3 = getThirdWednesdayOfMonth(Now);

        if (Now < wed1)
        {
            Label5.Text = "The next meeting is on" + "\n" + wed1.ToShortDateString() + "\nat 7 pm in room S242";
        }
        else if (Now < wed3)
        {
            Label5.Text = "The next meeting is on" + "\n" + wed3.ToShortDateString() + "\nat 7 pm in room S242";
        }
    }

    protected DateTime getFirstWednesdayOfMonth(DateTime seedDate)
    {
        DateTime wed1 = new DateTime(seedDate.Year, seedDate.Month, 1);
        while (wed1.DayOfWeek != DayOfWeek.Wednesday)
        {
            wed1 = wed1.AddDays(1);
        }
        return wed1;
    }
    protected DateTime getThirdWednesdayOfMonth(DateTime seedDate)
    {
        DateTime wed3 = new DateTime(seedDate.Year, seedDate.Month, 15);
        while (wed3.DayOfWeek != DayOfWeek.Wednesday)
        {
            wed3 = wed3.AddDays(1);
        }
        return wed3;
    }

    protected void btnInfo_Click(object sender, EventArgs e)
    {
        btnInfo.Visible = false;
        info.Visible = true;

    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            if (validateFirst.IsValid && validateLast.IsValid && validatePhone.IsValid && validateEmail.IsValid)
            {
                lblThanks.Text = "Thanks! you will contacted in 2 business days!";
                info.Visible = false;
            }
        }
    }
    protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ListBox1.SelectedValue == "analyst")
        {


        }
    }
}

および Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" 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 id="Head1" runat="server">
    <title></title>
    <style type="text/css">
        .heading
        {
            text-align: center;
            border-style: double;
            background-color:#F2A988;
            font-family:Sans-Serif;
            font-weight:bold;

        }
        #wrapper {
            margin: 0 auto;
            width: 400px; 
            text-align:left;
        }
        .style1
        {
            text-align: center;
            font-family:Sans-Serif;
        }
        .style2
        {
            font-family: Arial, Helvetica, sans-serif;
        }
    </style>
</head>
<body style="height: 642px; width: 911px; " id="wrapper">
    <form id="form1" runat="server">

    <div class="heading">
        ABC Computer Club - Inquiry Form</div>
        <br />

    <asp:Calendar ID="Calendar1" runat="server" Font-Names="Arial"></asp:Calendar>



        <br />
    <asp:Label ID="lblThanks" runat="server" 
        style="font-family: Arial, Helvetica, sans-serif; font-weight: 700"></asp:Label>
    <br />



        <br />

    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <asp:Button ID="btnInfo" runat="server" Font-Names="Arial" 
         style="font-weight: 700" 
        Text="I'd like to receive more information!" Width="261px" 
        onclick="btnInfo_Click" />

    <div runat="server" id="info" 
        style="position:relative; top: -1px; left: 7px; width: 463px; height: 415px;">
        <span class="style2">If you would like to join the club or receive more 
        information about the club, fill in the form below and click the submit button.</span><br />
        <br />
        <asp:Label ID="Label1" runat="server" 
            style="font-weight: 700; font-family: Arial, Helvetica, sans-serif" 
            Text="First Name:"></asp:Label>
&nbsp;<asp:TextBox ID="txtFName" runat="server"></asp:TextBox>
        <br />
        <br />
        <asp:Label ID="Label2" runat="server" 
            style="font-weight: 700; font-family: Arial, Helvetica, sans-serif" 
            Text="Last Name:"></asp:Label>
&nbsp;<asp:TextBox ID="txtLName" runat="server"></asp:TextBox>
        <br />
        <br />
        <asp:Label ID="Label3" runat="server" 
            style="font-weight: 700; font-family: Arial, Helvetica, sans-serif" 
            Text="Phone #:"></asp:Label>
&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:TextBox ID="txtPhone" runat="server"></asp:TextBox>
        <br />
        <br />
        <asp:Label ID="Label4" runat="server" 
            style="font-weight: 700; font-family: Arial, Helvetica, sans-serif" 
            Text="Email:"></asp:Label>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
        <br />
        <br />
        <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Submit" />
        <br />
        <br />
        <asp:RequiredFieldValidator ID="validateFirst" runat="server" 
            ControlToValidate="txtFName" ErrorMessage="First Name is Required" 
            style="font-family: Arial, Helvetica, sans-serif"></asp:RequiredFieldValidator>
        <br />
        <br />
        <asp:RequiredFieldValidator ID="validateLast" runat="server" 
            ControlToValidate="txtLName" ErrorMessage="Last Name is Required" 
            style="font-family: Arial, Helvetica, sans-serif"></asp:RequiredFieldValidator>
        <br />
        <br />
        <asp:RegularExpressionValidator ID="validatePhone" runat="server" 
            ControlToValidate="txtPhone" ErrorMessage="Phone Number is invalid" 
            style="font-family: Arial, Helvetica, sans-serif" 
            ValidationExpression="^[01]?[- .]?(\([2-9]\d{2}\)|[2-9]\d{2})[- .]?\d{3}[- .]?\d{4}$"></asp:RegularExpressionValidator>
        <br />
        <br />
        <asp:RegularExpressionValidator ID="validateEmail" runat="server" 
            ControlToValidate="txtEmail" ErrorMessage="Invalid Email" 
            style="font-family: Arial, Helvetica, sans-serif" 
            ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:RegularExpressionValidator>
    </div>

    <div runat="server" id="meeting" 
        style="position:absolute; top: 150px; left: 580px; width: 232px; height: 64px; text-align: center; margin-top: 0px; font-family: Arial; font-weight:bold;">
        <br />
&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:Label ID="Label5" runat="server" Text="Test"></asp:Label>
        <br />
        </div>



    <div runat="server" id="label" style="width: 308px; position:absolute; top: 45px; left: 550px; margin-top: 0px;" 
        class="style1">
        Click Below to find out when
        <br />
        the club meets next</div>

    <div runat="server" id="member" 



        style="position:absolute; top: 28px; left:880px; width: 274px; height: 441px; font-family:Sans-Serif;">
        <b>View Members by Program:<br />
        <asp:ListBox ID="ListBox1" runat="server" Height="175px" Width="213px" 
            onselectedindexchanged="ListBox1_SelectedIndexChanged">
            <asp:ListItem Value="all">All</asp:ListItem>
            <asp:ListItem Value="programmer">Computer Programmer</asp:ListItem>
            <asp:ListItem Value="itss">Information Technologies Support Services</asp:ListItem>
            <asp:ListItem Value="analyst">Systems Analyst</asp:ListItem>
        </asp:ListBox>
        <br />
        <br />
        </b></div>

    <div style="position:absolute; top: 99px; left: 600px; width: 192px; text-align: center; margin-top: 0px;">
        <asp:Button ID="Button3" runat="server" onclick="Button3_Click" 
            Text="Next Meeting" />
    </div>

    </form>
</body>
</html>

問題は、 「次の会議」をクリックするたびに何も起こらないのに対し、ラベルテキストを次の利用可能な月の第 1 または第 3 水曜日に設定する必要があることです。以前は機能していましたが、コード全体を新しい Web サイトにコピーしたときから機能しません。何が問題なのですか?

4

2 に答える 2

2

そのコードは正しく機能していません。たぶんそれは18日以前に機能していたようです。2012年7月は今月の第3水曜日でした(Now < wed3) == true

これで、ラベルのテキストプロパティを変更する唯一の方法であるtrueもtrueNow < wed1もできなくなります。Now < wed3

if (Now < wed1)
{
    Label5.Text = "The next meeting is on" + "\n" + wed1.ToShortDateString() + "\nat 7 pm in room S242";
}
else if (Now < wed3)
{
    Label5.Text = "The next meeting is on" + "\n" + wed3.ToShortDateString() + "\nat 7 pm in room S242";
}

たぶんあなたは私たちにあなたの本当の要件を伝える必要があります。あなたのプログラムは何をすべきですか?

page_loadのデフォルト設定をif(!IsPostback)チェックすることもできます。そうしないと、Calendar.SelectedDate常に上書きされます。

if(!Page.IsPostBack)
{
    // not on postbacks, f.e. when the user selected a date
    Calendar1.SelectedDate = DateTime.Today;
    // ....
}

ただし、第1水曜日または第3水曜日が利用できない場合は、来月の第1水曜日が表示されます。右?

それは私が求めていた不足している要件です。第3水曜日はすでに過去であるため、次の月の第3水曜日を返します。

public static DateTime getNextWeekDay(DateTime date, DayOfWeek dayOfWeek, int weekNum)
{
    if (weekNum < 1 || weekNum > 4)
        throw new ArgumentException("Number of week must be between 1 and 4.", "weekNum");

    int inWeekNum = date.Date.Day / 7;
    if (inWeekNum >= weekNum)
    {
        var nextMonth = date.AddMonths(1);
        date = new DateTime(nextMonth.Year, nextMonth.Month, 1);
    }
    DateTime currentDate = date;
    int currentWeekNum = 0;
    while (currentWeekNum < weekNum)
    {
        if (currentDate.DayOfWeek == dayOfWeek)
            currentWeekNum++;
        if (currentWeekNum == weekNum)
            break;
        else
            currentDate = currentDate.AddDays(1);
    }
    return currentDate;
}

Yiouは次のように使用できます。

DateTime wed1 = getNextWeekDay(Now, DayOfWeek.Wednesday, 1);
DateTime wed3 = getNextWeekDay(Now, DayOfWeek.Wednesday, 3);
于 2012-07-21T21:42:22.503 に答える
1

3つ目のケースが必要です

DateTime getFirstWednesdayOfNextMonth(DateTime seedDate) 
{ 
    int year = seedDate.Year;
    int month = seedDate.Month+1;
    if (month > 12) 
    {
        month = 1; 
        year = year + 1;
    }
    DateTime wed1 = new DateTime(year, month, 1); 
    while (wed1.DayOfWeek != DayOfWeek.Wednesday) 
    { 
       wed1 = wed1.AddDays(1); 
    } 
    return wed1; 
} 

Button3_Click に末尾の else を追加します

protected void Button3_Click(object sender, EventArgs e)    
{    
    DateTime Now = DateTime.Today;    
    DateTime wed1 = getFirstWednesdayOfMonth(Now);    
    DateTime wed3 = getThirdWednesdayOfMonth(Now);    
    DateTime wedNext = getFirstWednesdayOfNextMonth(Now);    

    if (Now < wed1)    
    {    
        Label5.Text = "The next meeting is on" + "\n" + wed1.ToShortDateString() + "\nat 7 pm in room S242";    
    }    
    else if (Now < wed3)    
    {    
        Label5.Text = "The next meeting is on" + "\n" + wed3.ToShortDateString() + "\nat 7 pm in room S242";    
    }    
    else     
    {    
        Label5.Text = "The next meeting is on" + "\n" + wedNextMonth.ToShortDateString() + "\nat 7 pm in room S242";    
    }    
}    

ところで、月の最初の水曜日がわかっている場合、残りの 2 つは最初の水曜日に 14 を足すだけで簡単に計算できます。

  DateTime wed1 = getFirstWednesdayOfMonth(Now); 
  DateTime wed3 = wed.AddDays(14);
  DateTime wedNext = wed3.AddDays(14);
  // But it could be in the same month (1,8,15,22,29)
  if(wedNext.Month == wed3.Month)
     wedNext = wedNext.AddDays(7);
于 2012-07-21T22:05:18.600 に答える