1

Ajax 日付カレンダーを使用する Web フォームがあります。これはうまくいきます。私が抱えている問題は、フォームを送信すると次のメッセージが表示されることです。

'String value can not be converted to a date' .AgendaDate = New SmartDate(txtAgendaDate.Text)

これは、カレンダーと関連するテキスト ボックスを保持する Web フォームです...

 <td>
     <asp:TextBox ID="txtAgendaDate" runat="server" ForeColor="Black" ></asp:TextBox>
 </td>
 <td>
     <asp:ImageButton runat="Server" ID="ImageButton1" ImageUrl="~/images/calendarpic.png" 
                AlternateText="Click here to display calendar" />

     <cc1:calendarextender ID="CalendarExtender1" runat="server" 
                     TargetControlID="txtAgendaDate" PopupButtonID="ImageButton1" >
     </cc1:calendarextender>
 </td>

Web フォームに関連付けられたプロパティを持つクラスがあります。残りのフィールドは機能し、ajax カレンダーのテキスト フィールドを除いてデータベースにデータを送信します。

これは、クラスのコードとtxtAgendaDateコードの簡略化されたバージョンです...

#Region " Agenda Variables "

'Declare Variables and data types and set default values
Private mAgendaID As Integer = 0
Private mOrganiser As String = ""
Private mMeeting As String = ""
Private mAgendaDate As SmartDate = New SmartDate()

#End Region

#Region " Constructors "

Public Sub New()
End Sub

Public Sub New(ByVal reader As SafeDataReader)
    '  Public Sub New(ByVal reader As SQLDataReader)

    'Combine variables & property types
    With reader
        mAgendaID = .GetInt32("AgendaID")
        mOrganiser = .GetString("Organiser")
        mMeeting = .GetString("Meeting")
        mAgendaDate = .GetSmartDate("AgendaDate")
    End With
End Sub

#End Region

#Region "Properties"

'Define form field properies so that they can be used when adding the data to the database on the add button is pressed.
Public Property AgendaID() As Integer
    Get
        Return mAgendaID
    End Get
    Set(ByVal Value As Integer)
        mAgendaID = Value
    End Set
End Property

Public Property Organiser() As String
    Get
        Return mOrganiser
    End Get
    Set(ByVal value As String)
        mOrganiser = value
    End Set
End Property

Public Property Meeting() As String
    Get
        Return mMeeting
    End Get
    Set(ByVal value As String)
        mMeeting = value
    End Set
End Property

Public Property AgendaDate() As SmartDate
    Get
        Return mAgendaDate
    End Get
    Set(ByVal Value As SmartDate)
        mAgendaDate = Value
    End Set
End Property

#End Region


End Class

これは、DBに接続し、ストアドプロシージャに接続し、パラメータも持っているように見える私のコマンドです。

Public Class Agenda_TempDAL

Public Shared Function AddAgenda_Temp(ByVal Agenda_Temp As Agenda_Temp) As Integer

    'Declare i as integer as 0
    Dim iAgendaID As Integer = 0

    'Database conn, this is linked to the web config file .AppSettings
    Using dbconnection As New SqlConnection(ConfigurationManager.AppSettings("dbconnection"))
        dbconnection.Open()

        'Command to state the stored procedure and the name of the stored procedure
        Using dbcommand As SqlCommand = dbconnection.CreateCommand
            With dbcommand
                .CommandType = CommandType.StoredProcedure
                .CommandText = "Stored_Proc_Name"

                'Create parameter for AgendaID and output
                Dim oParam As New SqlParameter
                oParam.ParameterName = "@AgendaID"
                oParam.Direction = ParameterDirection.Output
                oParam.SqlDbType = SqlDbType.Int

                'Create parameters for the remaining fields
                .Parameters.Add(oParam)
                .Parameters.AddWithValue("@Organiser", Agenda_Temp.Organiser)
                .Parameters.AddWithValue("@Meeting", Agenda_Temp.Meeting)
                .Parameters.AddWithValue("@AgendaDate", Agenda_Temp.AgendaDate.DBValue)

                'Simply execute the query
                dbcommand.ExecuteNonQuery()

            End With
        End Using
    End Using

    'Need to return the agendaID as an integer.
    Return iAgendaID

End Function
End Class 

そして、これがWebページのボタンの背後にあるコードです。これは、プロパティ/フィールドに基づいてエラーが発生するページです。問題はこの行にあります...

.AgendaDate = New SmartDate(txtAgendaDate.Text)

ボタンのコード全体はここにあります...

Protected Sub btnAddAgendaTemplate_Click(ByVal sender As Object, ByVal e As    System.EventArgs) Handles btnAddAgendaTemplate.Click

    'This works alongside the Class named Agenda_Temp which has the properties and DB connection assigned to it for each web form field.
    Dim oAgenda_Temp As New Agenda_Temp

    'Within the object Agenda_Temp Class use the properties defined. 
    'They are required to be defined in the Agenda_Temp/ app code so we can use them within here.

     With oAgenda_Temp
        .Organiser = txtOrganiser.Text
        .Meeting = txtMeeting.Text
        .AgendaDate = New SmartDate(txtAgendaDate.Text)


        'Within the object Agenda_Temp class use the defined DAL which includes all the DC connect and stored procedures.  
        oAgenda_Temp.AgendaID = Agenda_TempDAL.AddAgenda_Temp(oAgenda_Temp)
    End With

End Sub
End Class

文字列値を日付に変換できないと言っているのは理解していますが、.net 2010 を初めて使用するので、これを解決する方法がわかりませんか?

どんな助けでも大歓迎です。

4

2 に答える 2

0

文字列を新しい日付に変換してから更新します。MSDNから:

string date = "01/08/2008";
DateTime dt = Convert.ToDateTime(date); 

あなたのものは

DateTime dt = Convert.ToDateTime(txtAgendaDate.Text)

SmartDate次に、コンストラクターに日付を渡します。

oAgenda_Temp.AgendaDate = new SmartDate(dt)

最終結果:

  With oAgenda_Temp
        .Organiser = txtOrganiser.Text
        .Meeting = txtMeeting.Text
        .AgendaDate = New SmartDate(Convert.ToDateTime(txtAgendaDate.Text))


        'Within the object Agenda_Temp class use the defined DAL which includes all the DC connect and stored procedures.  
        oAgenda_Temp.AgendaID = Agenda_TempDAL.AddAgenda_Temp(oAgenda_Temp)
    End With
于 2012-04-16T14:47:51.043 に答える
0

他の人が指摘したように、入力値をに変換する必要がありますDateTime。関数が何をしているのかわかりませんSmartDate()が、エラー メッセージは、値を日付に変換できないことを明確に示しています。

次に、ページを送信する前に、入力が有効であることを確認するための検証を追加します。RequiredFieldValidatorおよびCompareValidatorまたはを使用しますRegularExpressionValidator

<asp:TextBox ID="txtDate" runat="server" ... />
<asp:RequiredFieldValidator ID="reqDate" runat="server" ErrorMessage="Required" Display="Dynamic" ControlToValidate="txtDate"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="regDate" runat="server" ControlToValidate="txtDate" ErrorMessage="Please enter a valid date in the format (mm/dd/yyyy)" ValidationExpression="^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$"></asp:RegularExpressionValidator>
于 2012-04-16T15:12:39.777 に答える