我正在开发一个小型的ASP .Net Web应用程序培训 我已经开发了一个ASPX页面,我已经通过数据绑定声明了一个链接到ObjectDataSource的FormView控件 update方法采用Product对象 Product对象具有包含double值的属性Price。
用户可以通过FormView创建读取更新删除产品 但是在更新或插入产品时可能会出现错误。
更准确地说,从FormView的输入值实例化Product对象时会引发错误 与Price属性关联的输入控件中包含的字符串无法强制转换为double 作为一个例子,“50,6”不能被强制转换为双倍。 昏迷是小数点分隔符 我想ASP .Net期望得到小数分隔符的一个点,因为它可能考虑了EN-US文化。
以下是我在浏览器中获得的堆栈跟踪:
System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) +489
System.Web.UI.WebControls.ObjectDataSourceView.ConvertType(Object value, Type type, String paramName) +117
System.Web.UI.WebControls.ObjectDataSourceView.BuildObjectValue(Object value, Type destinationType, String paramName) +167
System.Web.UI.WebControls.ObjectDataSourceView.BuildDataObject(Type dataObjectType, IDictionary inputParameters) +229
System.Web.UI.WebControls.ObjectDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) +1421
System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values, IDictionary oldValues, DataSourceViewOperationCallback callback) +95
System.Web.UI.WebControls.FormView.HandleUpdate(String commandArg, Boolean causesValidation) +1154
System.Web.UI.WebControls.FormView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +445
System.Web.UI.WebControls.FormView.OnBubbleEvent(Object source, EventArgs e) +95
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.FormViewRow.OnBubbleEvent(Object source, EventArgs e) +112
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +125
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +169
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +9
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +176
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563
是否可以指定在通过数据绑定从字符串值设置对象属性时要考虑的区域性?
答案 0 :(得分:2)
对于.Net 4.5及以上版本,这可能有效:
Page_Init(object sender, EventArgs e)
{
MyObjectDataSource.ParsingCulture = ParsingCulture.Current;
//Invariant is en-US
}
此外,请确保测试客户端的文化设置为浏览器和操作系统的“FR-FR”。 MSDN解释说可以使用客户端的文化而不是服务器的文化来进行解析。 (他们不讨论不变的文化,但你绝对不想要它。)
如果这不起作用,或者您在.NET 4.0或更早版本上使用InsertParameters可能有所帮助(无论您使用的是POCO还是参数):
请参阅此主题:http://forums.asp.net/t/963913.aspx/1
<asp:ObjectDataSource ...>
...
<InsertParameters>
<asp:Parameter Name="Birthdate" Type="DateTime" />
<asp:Parameter Name="AnnualIncome" Type="Decimal" />
<asp:Parameter Name="Height" Type="Double" />
</InsertParameters>
</asp:ObjectDataSource ...>
编辑:有一个相关的堆栈溢出问题:ObjectDataSource fails to parse string to DateTime