当前位置: 首页 > 编程语言 > C#

C#MVC4ViewModeldoesnotacceptnullDateTimeshare

时间:2023-04-11 02:23:27 C#

C#MVC4ViewModeldoesnotacceptnullDateTime学习C#和mvc4在这里遇到了一些麻烦。问题出在我的应用程序的过滤器部分。我有一个ViewModel,它从数据库中获取“Listar_Produtos”列表,以及一些用于搜索选项的字段。我打算做的是让过滤器接受任何字段,即使它为空。因为我会根据这些参数制作过滤器。我有一个Viewmodel:使用Foolproof;使用系统;使用System.Collections.Generic;使用System.ComponentModel;使用System.ComponentModel.DataAnnotations;使用System.Linq;使用System.Web;命名空间Ecommerce.Models.Repository{publicclassProduto_Repository{publicclassIndex_Listar_Produtos{publicListIndex_List_Produto{get;放;}[Display(Name="DatadeCadastroInicial")][DisplayFormat(ApplyFormatInEditMode=true,DataFormatString="{0:dd/MM/yyyy}")]publicNullableCadastroInicialData{get;放;}[Display(Name="DatadeCadastroFinal")][DisplayFormat(ApplyFormatInEditMode=true,DataFormatString="{0:dd/MM/yyyy}")][GreaterThanOrEqualTo("CadastroInicialData",ErrorMessage=""DataInicial",devesermaiorque"DataFinal"")]publicNullableCadastroFinalData{get;放;我有以下观点:@Html.LabelFor(Model=>Model.CadastroInicialData)@Html.TextBoxFor(Model=>Model.CadastroInicialData,"{0:dd/MM/yyyy}")@Html.ValidationMessageFor(Model=>Model.CadastroInicialData)@Html.LabelFor(Model=>Model.CadastroFinalData)@Html.TextBoxFor(Model=>Model.CadastroFinalData,"{0:dd/MM/yyyy}")@Html。ValidationMessageFor(Model=>Model.CadastroFinalData)在我的控制器中我有:);ViewModel.Index_List_Produto=Model_list.Index_List_Produto;返回视图(“索引”,视图模型);其中“Produto_Repository.GetProdutoByAll();”再次返回“Produtos”列表如果我在表格中提供日期,代码可以正常工作。日期采用“pt-BR”格式:23/03/2013。但是,如果我在字段中不提供任何内容(在我看来都是日期字段),那么“if(!ModelState.IsValid)”将返回true并键入“if”,因为“CadastroInicialData”和“CadastroFinalData”都采用空值的预期行为是ViewModel可以接受由“Nullable”或“DateTime”授予的null或空值吗?我尝试在可空日期字段中插入一个值,执行以下操作:if(ViewModel.CadastroInicialData==null)ViewModel.CadastroInicialData=Convert.ToDateTime("01/01/2013");如果(ViewModel.CadastroFinalData==null)ViewModel.CadastroFinalData=Convert.ToDateTime("01/01/2013");但是现在ViewModel返回以下错误:“isaninvaliddateformat”注意,我正在使用以下“解决方案”来转换pt-BRdateformatDatetime,问题如下:Formattingdatetimeinasp.netmvc4How当文本字段未填充日期时使ViewModel接受空值?我在这里有点困惑。感谢您的帮助!谢谢!您可以向Model类添加其他属性,并使用它们来确定该值是否为null。并在你的观点中实施它们。见下面的代码:模型publicclassIndex_Listar_Produtos{publicListIndex_List_Produto{get;放;}[Display(Name="DatadeCadastroInicial")][DisplayFormat(ApplyFormatInEditMode=true,DataFormatString="{0:dd/MM/yyyy}")]publicNullableCadastroInicialData{get;放;}[Display(Name="DatadeCadastroFinal")][DisplayFormat(ApplyFormatInEditMode=true,DataFormatString="{0:dd/MM/yyyy}")][GreaterThanOrEqualTo("CadastroInicialData",ErrorMessage=""DataInicial",devesermaiorque"DataFinal"")]publicNullableCadastroFinalData{get;放;}publicstringGetStringTypeCadastroInicialData{get{returnCadastroInicialData!=null?CadastroInicialData.Value.ToShortDateString():DateTime.MinValue.ToShortDateString()(或空字符串);}}publicstringGetStringTypeCadastroFinalData{get{returnCadastroInicialData!=null?CadastroFinalData.Value.ToShortDateString():DateTime.Now.ToShortDateString();}}}图片@Html.LabelFor(模型=>Model.GetStringTypeCadastroInicialData)@Html.TextBoxFor(模型=>Model.GetStringTypeCadastroInicialData)@Html.ValidationMessageFor(模型=>Model.GetStringTypeCadastroInicialData)@Html.LabelFor(模型=>Model.GetStringTypeCadastroFinalData)@Html.TextBoxFor(模型=>Model.GetStringTypeCadastroFinalData)@Html.ValidationMessageFor(Model=>Model.GetStringTypeCadastroFinalData)而不是publicNullableCadastroInicialData{get;放;尝试公共日期时间?CadastroInicialData{得到;放;}然后查看它是否具有您可以执行的值:if(CadastroInicialData.HasValue){//在这里进行处理}您的模型状态由于第二个可为null的DateTime值上的GreaterThan数据注释而失败。null不大于null,因此失败。您将需要修改GreaterThan数据注释,以便它在值为null时不进行比较,或者删除该数据注释并自己进行比较。一个例子可能是:CadastroFinalData");}if(!modelState.IsValid()){Produto_Repository.Index_Listar_ProdutosModel_list=Produto_Repository.GetProdutoByAll();ViewModel.Index_List_Produto=Model_list.Index_List_Produto;返回视图(“索引”,视图模型);}而不是使用ConvertToDateTime使用DateTime.TryParseExact指定格式和区域性。下面的代码应该可以运行并修复错误:以上是C#教程:C#MVC4ViewModeldoesnotacceptnullDateTime全部内容分享,如果对大家有用需要进一步了解C#教程,希望大家将更加关注—if(ViewModel.CadastroInicialData==null)ViewModel.CadastroInicialData=DateTime.TryParseExact(text,"MM/dd/yyyy",CultureInfo.InvariantCulture,DateTimeStyles.None,out"01/01/2013");如果(ViewModel.CadastroFinalData==null)ViewModel.CadastroFinalData=DateTime.TryParseExact(text,"MM/dd/yyyy",CultureInfo.InvariantCulture,DateTimeStyles.None,out"01/01/2013");侵权请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢