SQL 服务器中的不可空字段仍被视为 ASP.NET MVC 中的必填字段
Not Nullable fields in SQL Server Still Considered Required Fields in ASP.NET MVC
我在 table 中有一个不可为 null 的字段,默认值已在 SSMS 的 属性 "Default Value or Binding" 中设置。我在 ASP.Net mvc 应用程序中链接了这个 table。当我创建视图和 运行 创建视图时,它仍然要求我为不可空字段输入必填字段,即使我为它们分配了默认值。
在此之后我删除了行:
@Html.ValidationMessageFor(model => model.position, "", new { @class = "text-danger" })
每个都在下面
@Html.EditorFor
语句,但这次它 post 我回到了数据库没有任何变化的同一页面。
由于我已经为必填字段设置了默认值,因此如何删除必填字段中的消息?
这是不使用实体模型作为视图模型的众多原因之一。 MVC 不关心必填字段是否具有默认值,该信息与数据库相关,与输入验证无关。
引入不需要这些属性的视图模型,并将发布的视图模型映射到您的实体模型。
因此,给定一个如下所示的实体模型:
public class SomeEntity
{
// this property is not-nullable in the database
[Required]
public string SomeRequiredDatabaseField { get; set; }
}
因为 SomeRequiredDatabaseField
是 NOT NULL
,它被 Entity Framework 注释为这样,即使它有默认值。 MVC 将选取此注释,并在 属性 没有值时认为模型无效。
现在如果你引入一个viewmodel,你可以告诉MVC不需要这个属性:
public class SomeViewModel
{
// Not required
public string SomeRequiredDatabaseField { get; set; }
}
现在在您的控制器中,将视图模型映射到实体模型(最好使用 AutoMapper):
public ActionResult Post(SomeViewModel model)
{
if (ModelState.IsValid)
{
var entityToSave = new SomeEntity
{
SomeRequiredDatabaseField = model.SomeRequiredDatabaseField
};
db.SomeEntity.Add(entityToSave);
}
// ...
}
您只需在模型中创建构造函数即可。一旦创建新实例,它将初始化默认值。如果用户提供该字段,则它将被覆盖。如果否,构造函数的值将传递给 EF。
您现在尝试执行的操作无法按照规范运行:https://msdn.microsoft.com/en-us/library/ms187872.aspx
Here考虑到该字段将始终在数据库中生成,您可以看到如何实现您想要的。
我在 table 中有一个不可为 null 的字段,默认值已在 SSMS 的 属性 "Default Value or Binding" 中设置。我在 ASP.Net mvc 应用程序中链接了这个 table。当我创建视图和 运行 创建视图时,它仍然要求我为不可空字段输入必填字段,即使我为它们分配了默认值。
在此之后我删除了行:
@Html.ValidationMessageFor(model => model.position, "", new { @class = "text-danger" })
每个都在下面
@Html.EditorFor
语句,但这次它 post 我回到了数据库没有任何变化的同一页面。
由于我已经为必填字段设置了默认值,因此如何删除必填字段中的消息?
这是不使用实体模型作为视图模型的众多原因之一。 MVC 不关心必填字段是否具有默认值,该信息与数据库相关,与输入验证无关。
引入不需要这些属性的视图模型,并将发布的视图模型映射到您的实体模型。
因此,给定一个如下所示的实体模型:
public class SomeEntity
{
// this property is not-nullable in the database
[Required]
public string SomeRequiredDatabaseField { get; set; }
}
因为 SomeRequiredDatabaseField
是 NOT NULL
,它被 Entity Framework 注释为这样,即使它有默认值。 MVC 将选取此注释,并在 属性 没有值时认为模型无效。
现在如果你引入一个viewmodel,你可以告诉MVC不需要这个属性:
public class SomeViewModel
{
// Not required
public string SomeRequiredDatabaseField { get; set; }
}
现在在您的控制器中,将视图模型映射到实体模型(最好使用 AutoMapper):
public ActionResult Post(SomeViewModel model)
{
if (ModelState.IsValid)
{
var entityToSave = new SomeEntity
{
SomeRequiredDatabaseField = model.SomeRequiredDatabaseField
};
db.SomeEntity.Add(entityToSave);
}
// ...
}
您只需在模型中创建构造函数即可。一旦创建新实例,它将初始化默认值。如果用户提供该字段,则它将被覆盖。如果否,构造函数的值将传递给 EF。
您现在尝试执行的操作无法按照规范运行:https://msdn.microsoft.com/en-us/library/ms187872.aspx
Here考虑到该字段将始终在数据库中生成,您可以看到如何实现您想要的。