gpt4 book ai didi

asp.net - ModelState.IsValid 返回 true,即使所需字符串为 null

转载 作者:行者123 更新时间:2023-12-02 16:10:49 24 4
gpt4 key购买 nike

情况

我有一个 LINQ-TO-SQL 模型,其中的表包含三列。通常的ID(身份,自动生成),然后是int类型的Avarchar类型的B (最大)。所有列在数据库中都定义为NOT NULL

WebForms页面上,我声明了一个绑定(bind)到项目的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();
}
  1. 调用 UpdateItem 方法
  2. TryUpdateModel 工作并将表单值填充到 item 中。
  3. 调试时,我可以看到 item.Bnull,正如预期的那样
  4. 然后ModelState.IsValid返回true?!?
  5. 调用db.SubmitChanges()失败并出现异常

问题

我不明白为什么当数据模型指定B不能为null时ModelState.IsValid会返回true嗯>。有人可以解释一下吗?我做错了什么?

解决方法

我尝试的一件事是通过包含以下代码将数据注释添加到数据类。没成功。

  [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 - ModelState.IsValid 返回 true,即使所需字符串为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12273503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com