首页 > 解决方案 > 将导航属性保存为空

问题描述

我有一个Job模型和StatusOnHold模型。StatusOnHold我在Job模型中添加了导航属性。出于某种原因,当我Job用空保存模型时StatusOnHold,我仍然StatusOnHoldIdJob模型中获得价值。

  1. StatusOnHold为空时,我试图在模型中接收NULL值。StatusOnHoldIdJob
  2. StatusOnHold不为空时,我正在尝试获取StatusOnHoldId并保存StatusOnHold模型中的值(现在它的工作方式就是这样)。

太感谢了。

这是我的模型...

public class StatusOnHoldViewModel
{
    public int Id { get; set; }
    public string Note { get; set; }
}

public class JobViewModel
{
    [Key]
    public int Id { get; set; }
    public string JobNote { get; set; }
    public JobStatus JobStatus { get; set; }
    public CompanyViewModel Company { get; set; }
    public CustomerViewModel Customer { get; set; }

    public StatusOnHoldViewModel StatusOnHold { get; set; }
}

这里是控制器...

    public async Task<IActionResult> Create(JobViewModel jobViewModel)
    {
        if (ModelState.IsValid)
        {
            var job = _mapper.Map<Job>(jobViewModel);
            var newjobId = await _jobRepository.AddAsync(job);

            return RedirectToAction("details", new { id = newjobId });
        }
        return View();
    }

这是视图...

<div class="form-group row">
    <label class="col-sm-2 col-form-label"></label>
    <div class="col-sm-10">
        <div class="m-1">On-Hold</div>
        <textarea asp-for="StatusOnHold.Note" style="height:86px; min-height:86px" class="form-control" placeholder="Reason..."></textarea>
        <span asp-validation-for="StatusOnHold.Note" class="text-danger"></span>
    </div>
</div>

标签: asp.net-coremodel-view-controller

解决方案


StatusOnHoldId 不会为空,它总是有数据,如果你不在 textarea 中写注释,它看起来就像{ "id":0,"note":null}对 jobViewModel` 的操作,这将创建一个新记录。

一种解决方法是,您可以在StatusOnHold为 null 时设置为notenull:

public async Task<IActionResult> Create(JobViewModel jobViewModel)
{
    if (ModelState.IsValid)
    {
        if(jobViewModel.StatusOnHold.Note == null)
        {
            jobViewModel.StatusOnHold = null;
        }

        var job = _mapper.Map<Job>(jobViewModel);
        var newjobId = await _jobRepository.AddAsync(job);

        return RedirectToAction("details", new { id = newjobId });
    }
    return View();
}

推荐阅读