首页 > 解决方案 > Razor,.Net 核心:可选字段被创建为具有空值的对象

问题描述

我正在使用 razor 和 asp.net core 3.1 创建结帐表单。提交结帐表单后,order对象也会自动创建。并且该telephone字段应该是可选的,它也被创建为具有null如下值的对象(如果用户将输入字段留空并提交表单)。

在此处输入图像描述

我的简化模型看起来像这样

 public partial class Order
{
    public Order()
    {
        OrderStock = new HashSet<OrderStock>();
    }

    public int Id { get; set; }
    public string Reference { get; set; }
    public virtual Address Address { get; set; }
    ...
    public virtual Telephone Telephone { get; set; }
    public virtual ICollection<OrderStock> OrderStock { get; set; }
}

我的剃须刀页面如下所示:

 <form id="CheckOut" asp-controller="CheckOut" asp-action="CreateOrder" method="post">
<div class="col-md-8 mb-3">
    <label asp-for="Address.Street">Street <span>*</span></label>
    <input asp-for="Address.Street" type="text" class="form-control mb-3" maxlength="50" />
</div>
...
<div class="col-12 mb-3">
    <label asp-for="Telephone.TelephoneNumber">Phone No</label>
    <input asp-for="Telephone.TelephoneNumber" type="number" class="form-control" min="0" maxlength="20"/>
</div>
<div class="col-12 mb-4">
    <label asp-for="Email.EmailAddress">Email Address <span>*</span></label>
    <input asp-for="Email.EmailAddress" type="email" class="form-control" maxlength="30"/>
</div>

所以我必须摆脱这个telephone正在创建的对象,以使数据库快乐,因为它试图将一个空记录保存到telephone我的数据库中的表中。我能想到的第一个解决方案是,if像这样在我的控制器中使用 -statement。

if (string.IsNullOrEmpty(order.Telephone.TelephoneNumber))
{
   order.Telephone = null;
}

但这显然不是避免这种情况的最佳解决方案。有没有更好的方法来处理这个?

标签: c#asp.net-corerazor

解决方案


推荐阅读