【问题标题】:How to automatically set maxlengh property for textbox from EF?如何从 EF 自动设置文本框的 maxlengh 属性?
【发布时间】:2023-03-13 19:20:01
【问题描述】:

我正在使用普通助手 EditFor 将数据绑定到 html 控件。

为了完整起见,这里举个例子:

@Html.EditorFor(model => model.Description, new { htmlAttributes = new { @maxlength= 100, @class = "form-control" } })

要为字符串字段设置maxlength,我需要在使用相同表字段的每个视图中显式设置属性,并且数据模型中有许多视图和字符串值。

在每个页面中都这样做很容易出错。如果忘记某个地方,更改大小会破坏应用程序。

如何直接从 EF 模型中传递长度?

【问题讨论】:

  • [MaxLength(50)] 属性添加到模型属性中。
  • 更改 EF 生成的代码?
  • 你不应该在视图中使用 EF 模型。

标签: entity-framework model-view-controller asp.net-mvc-views


【解决方案1】:

最简单的选择是将[MaxLength(50)] 属性添加到模型属性。例如:

public class SomeModel
{
    [MaxLength(50)]
    public string SomeProperty { get; set; }
}

然后,您可以在对 @Html.EditorFor() 的调用中省略 maxlength 属性,它将从模型元数据中获取。

【讨论】:

    【解决方案2】:

    您可以使用 Fluent API 配置属性的最大长度。在此示例中,以 SQL Server 为目标,这将导致使用 nvarchar(500) 数据类型。

    protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<Test>()
                    .Property(b => b.Description)
                    .HasMaxLength(500);
            }
    

    或者您可以使用数据注释来配置属性的最大长度。

    public class Test
        {
            [MaxLength(500)]
            public string Description{ get; set; }
        }
    

    【讨论】:

    • 你认为第一段代码在这种情况下会有什么帮助?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多