有一个 asp.net 应用程序,并且正在为详细信息视图编写插入、更新和删除操作
我的插入效果很好,现在我正在尝试进行更新,但是当我按下更新按钮时,我得到了 YSOD。表单上只有一个日期,并且使用完全相同的模板进行插入和编辑。下面是 asp 和堆栈跟踪,据我所知,此时它不在我的任何潜艇中:
<asp:DetailsView ID="dvInvoice" runat="server" Height="50px" Width="250px" DataSourceID="odsInvoices" AutoGenerateRows="False" DataKeyNames="ID">
<Fields>
<asp:TemplateField HeaderText="ID" InsertVisible="False" SortExpression="ID">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("ID") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("ID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="TripNo" SortExpression="TripNo">
<EditItemTemplate>
<asp:TextBox ID="txtTripNo" runat="server" Text='<%# Bind("TripNo") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="txtTripNo" runat="server" Text='<%# Bind("TripNo") %>'></asp:TextBox>
<asp:RequiredFieldValidator ValidationGroup="vDetailErrors"
CssClass="ErrorClass" ID="rfvTripNo" runat="server"
ErrorMessage="An trip no must entered"
ControlToValidate="txtTripNo"
Display="Dynamic">
</asp:RequiredFieldValidator>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("TripNo") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="TypeID" SortExpression="TypeID">
<InsertItemTemplate>
<asp:DropDownList ID="ddLineTypes"
runat="server"
SelectedValue='<%# Bind("TypeID")%>'
DataSourceID="odsLineTypes"
DataTextField="TypeDesc"
DataValueField="TypeID"
AppendDataBoundItems="True" AutoPostBack="True" OnSelectedIndexChanged="Type_Change"
>
<asp:ListItem Value="-1" Selected="True">Select a Type</asp:ListItem>
</asp:DropDownList>
<br />
<asp:CompareValidator ID="cvLineTypes" runat="server"
ControlToValidate="ddLineTypes" CssClass="ErrorClass"
ErrorMessage="Please Select a Type"
ValidationGroup="vDetailErrors" ValueToCompare="-1" Operator="NotEqual"
Display="Dynamic"></asp:CompareValidator>
<asp:ObjectDataSource ID="odsLineTypes" runat="server" OldValuesParameterFormatString="original_{0}" TypeName="LineTypesBLL" SelectMethod="GetLineTypes">
<SelectParameters>
<asp:Parameter DefaultValue="True" Name="InvOnly" Type="Boolean" />
</SelectParameters>
</asp:ObjectDataSource>
</InsertItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddLineTypes"
runat="server"
SelectedValue='<%# Session("CurrType")%>'
DataSourceID="odsLineTypes"
DataTextField="TypeDesc"
DataValueField="TypeID"
AppendDataBoundItems="True" AutoPostBack="True" OnSelectedIndexChanged="Type_Change"
>
</asp:DropDownList>
<br />
<asp:CompareValidator ID="cvLineTypes" runat="server"
ControlToValidate="ddLineTypes" CssClass="ErrorClass"
ErrorMessage="Please Select a Type"
ValidationGroup="vDetailErrors" ValueToCompare="-1" Operator="NotEqual"
Display="Dynamic"></asp:CompareValidator>
<asp:ObjectDataSource ID="odsLineTypes" runat="server" OldValuesParameterFormatString="original_{0}" TypeName="LineTypesBLL" SelectMethod="GetLineTypes">
<SelectParameters>
<asp:Parameter DefaultValue="True" Name="InvOnly" Type="Boolean" />
</SelectParameters>
</asp:ObjectDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("TypeID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="VendorID" SortExpression="VendorID">
<EditItemTemplate>
<asp:DropDownList ID="ddVendors"
runat="server"
SelectedValue='<%# Bind("VendorID")%>'
DataSourceID="odsVendors"
DataTextField="Name"
DataValueField="VendorID"
AppendDataBoundItems="True"
AutoPostBack ="True">
<asp:ListItem Value="-1">Select a Vendor</asp:ListItem>
</asp:DropDownList>
<br />
<asp:CompareValidator ID="cvVendors" runat="server"
ControlToValidate="ddVendors" CssClass="ErrorClass"
ErrorMessage="Please Select a Vendor"
ValidationGroup="vDetailErrors" ValueToCompare="-1" Operator="NotEqual"
Display="Dynamic"></asp:CompareValidator>
<asp:ObjectDataSource ID="odsVendors" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetVendors" TypeName="VendorsBLL"></asp:ObjectDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("VendorID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="InvNo" SortExpression="InvNo">
<EditItemTemplate>
<asp:TextBox ID="txtInvNo" runat="server" Text='<%# Bind("InvNo") %>'></asp:TextBox>
<asp:RequiredFieldValidator ValidationGroup="vDetailErrors"
CssClass="ErrorClass" ID="rfvInvNo" runat="server"
ErrorMessage="An invoice number must be entered"
ControlToValidate="txtInvNo"
Display="Dynamic">
</asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Bind("InvNo") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="InvAmount" SortExpression="InvAmount">
<EditItemTemplate>
<asp:TextBox ID="txtInvAmount" runat="server" Text='<%# Bind("InvAmount") %>'></asp:TextBox>
<br />
<asp:RequiredFieldValidator ValidationGroup="vDetailErrors"
CssClass="ErrorClass" ID="rfvInvAmount" runat="server"
ErrorMessage="An invoice amount must be entered"
ControlToValidate="txtInvAmount"
Display="Dynamic"></asp:RequiredFieldValidator>
<br />
<asp:CompareValidator ValidationGroup="vDetailErrors"
CssClass="ErrorClass" ID="cvInvAmount" runat="server"
ControlToValidate="txtInvAmount"
ErrorMessage="A numeric Invoice Amount MUST be entered"
Operator="DataTypeCheck" Type="Currency"
Display="Dynamic"></asp:CompareValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label6" runat="server" Text='<%# Bind("InvAmount") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="InvDate" SortExpression="InvDate">
<EditItemTemplate>
<asp:TextBox ID="txtInvDate" runat="server" Text='<%# Bind("InvDate") %>'></asp:TextBox>
<br />
<asp:RequiredFieldValidator ValidationGroup="vDetailErrors"
CssClass="ErrorClass" ID="rfvInvDate" runat="server"
ErrorMessage="An invoice date must be entered"
ControlToValidate="txtInvDate"
Display="Dynamic">
</asp:RequiredFieldValidator>
<br />
<asp:CustomValidator ValidationGroup="vDetailErrors"
CssClass="ErrorClass"
ID="cvInvDate" runat="server"
ErrorMessage="A valid date within the last two years and no later than next year must be entered"
OnServerValidate="cvInvDate_ServerValidate" ControlToValidate="txtInvDate"
Display="Dynamic">
</asp:CustomValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label7" runat="server" Text='<%# Bind("InvDate") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField CausesValidation="true" ShowEditButton="true" ShowInsertButton="true" ValidationGroup="vDetailErrors" />
</Fields>
</asp:DetailsView>
<p>
<asp:ObjectDataSource ID="odsInvoices" runat="server" InsertMethod="AddInvoice" OldValuesParameterFormatString="original_{0}" SelectMethod="GetInvoicesByTripNo" TypeName="InvoicesBLL" UpdateMethod="UpdateInvoice">
<InsertParameters>
<asp:ControlParameter ControlID="dvInvoice" Name="TripNo" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="dvInvoice" Name="TypeID" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="dvInvoice" Name="VendorID" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="dvInvoice" Name="InvNo" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="dvInvoice" Name="InvAmount" PropertyName="SelectedValue" Type="Decimal" />
<asp:ControlParameter ControlID="dvInvoice" Name="InvDate" PropertyName="SelectedValue" Type="DateTime" />
<asp:Parameter Name="ID" Type="Int32" />
</InsertParameters>
<SelectParameters>
<asp:ControlParameter ControlID="txtLoadNo" Name="TripNo" PropertyName="Text" Type="String" />
</SelectParameters>
<UpdateParameters>
<asp:ControlParameter ControlID="dvInvoice" Name="TripNo" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="dvInvoice" Name="TypeID" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="dvInvoice" Name="VendorID" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="dvInvoice" Name="InvNo" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="dvInvoice" Name="InvAmount" PropertyName="SelectedValue" Type="Decimal" />
<asp:ControlParameter ControlID="dvInvoice" Name="InvDate" PropertyName="SelectedValue" Type="DateTime" />
<asp:ControlParameter ControlID="dvInvoice" Name="original_ID" PropertyName="SelectedValue" Type="Int32" />
</UpdateParameters>
</asp:ObjectDataSource>
YSOD 错误
从“Int32”到“DateTime”的无效转换。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidCastException:从“Int32”到“DateTime”的无效转换。
源错误:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
堆栈跟踪:
[InvalidCastException: Invalid cast from 'Int32' to 'DateTime'.]
System.Int32.System.IConvertible.ToDateTime(IFormatProvider provider) +134
System.Convert.ChangeType(Object value, TypeCode typeCode, IFormatProvider provider) +519
System.Web.UI.WebControls.Parameter.GetValue(Object value, String defaultValue, TypeCode type, Boolean convertEmptyStringToNull, Boolean ignoreNullableTypeChanges) +126
System.Web.UI.WebControls.Parameter.GetValue(Object value, Boolean ignoreNullableTypeChanges) +63
System.Web.UI.WebControls.Parameter.get_ParameterValue() +40
System.Web.UI.WebControls.ParameterCollection.GetValues(HttpContext context, Control control) +247
System.Web.UI.WebControls.ObjectDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) +1440
System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values, IDictionary oldValues, DataSourceViewOperationCallback callback) +87
System.Web.UI.WebControls.DetailsView.HandleUpdate(String commandArg, Boolean causesValidation) +1091
System.Web.UI.WebControls.DetailsView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +425
System.Web.UI.WebControls.DetailsView.OnBubbleEvent(Object source, EventArgs e) +89
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.DetailsViewRow.OnBubbleEvent(Object source, EventArgs e) +80
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +121
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +156
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +9642338
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724