asp.net – ModelState.IsValid返回true,即使必需的字符串为null
情况
我有一个LINQ-TO-SQL模型,其中包含一个包含三列的表.通常的ID(标识,自动生成),然后是int类型的A和类型为varchar(MAX)的B.所有列都在数据库中定义为NOT NULL. 在WebForms页面上,我声明了一个绑定到项目的DetailsView: <asp:ValidationSummary runat="server" ShowModelStateErrors="true" /> <asp:DetailsView DataKeyNames="Id" runat="server" ItemType="test.MyTable" SelectMethod="..." UpdateMethod="..."> <Fields> <asp:DynamicField DataField="A" /> <asp:TemplateField> <EditItemTemplate> <asp:TextBox ID="B" runat="server" TextMode="MultiLine" Columns="80" Rows="8" Text="<%# BindItem.B %>" /> </EditItemTemplate> <ItemTemplate> <pre><asp:Label runat="server" Text="<%# Item.B %>" /></pre> </ItemTemplate> </asp:TemplateField> </Fields> </asp:DetailsView> 所有这些代码都在ASP.NET 4.5上的Visual Studio 2012中运行. 怎么了 到现在为止还挺好.更新和查看作品.当我输入无效值时,问题就开始了.对字段A使用“”会在页面顶部显示一条漂亮的错误消息.好极了!但是,当我使用“”作为字段B的值时会发生这种情况: public void DetailsView_UpdateItem(int id) { var item = db.MyTable.Where(row => row.Id==id).Single(); TryUpdateModel(item); if (ModelState.IsValid) db.SubmitChanges(); } >调用UpdateItem方法 问题 我不明白为什么当数据模型指定B不能为null时,ModelState.IsValid将返回true.有人可以解释一下吗?我究竟做错了什么? 解决方法 我尝试过的一件事是通过包含以下代码将Data Annotations添加到数据类.它没用. [MetadataType(typeof(MyTableMetadata))] public partial class MyTable { } public class MyTableMetadata { [Required] [StringLength(255,MinimumLength=1)] public string B { get; set; } } 很明显,我可以在UpdateItem方法中手动检查null,或者我可以添加RequiredFieldValidator – 但我不想这样做. 解决方法
只是一些武断的建议: 确保您正在引用System.ComponentModel.DataAnnotations 3.5. (不是3.6)或其他一些正确的命名空间(据我所知,只有一些用于WCF RIA服务). 尝试不同的设置 [DisplayFormat(ConvertEmptyStringToNull = …)] 确保您正在执行POST请求=)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 部署后不显示捆绑的css … ASP.NET MVC4
- asp.net-mvc – 如何给Razor MVC中的共享布局模型?
- asp.net-mvc – 存储库模式:每个实体一个存储库类?
- asp.net-mvc – 使用DI ninject抛出错误的自定义角色提供程
- asp.net – 如何防止Hangfire重复作业在连续执行30分钟后重
- asp.net-mvc – 大型Web应用程序中的Windows Workflow用法
- asp.net – HttpContext.Request.Cookies和HttpContext.Res
- asp.net-mvc – ASP.NET MVC授权和使用模型类的权限
- ASP.NET迁移中的Discriminator列是什么?
- 在预编译asp.net网站 – 是否重要?