微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在我的创建过程中,我想写入另一个实体,而不仅仅是使用

如何解决在我的创建过程中,我想写入另一个实体,而不仅仅是使用

如果我提交页面,第一次保存没有问题

然后我将所有值分配给我想写入的另一个实体以在那里创建新记录。

为什么我会得到一个 System Null Reference。我在所有领域都有我想要的值?

[

Error Message

=== 这是我的 C# 代码 ============

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using WorkCollaboration.Data;
using WorkCollaboration.Models;

namespace WorkCollaboration.Pages.TimeReports
{
    public class CreateModel : PageModel
    {
        private readonly WorkCollaboration.Data.WorkCollaborationContext _context;

        public CreateModel(WorkCollaboration.Data.WorkCollaborationContext context)
        {
            _context = context;
        }

        public IActionResult OnGet()
        {
            CusContactDropDowndisp = _context.CusContactDropDown.ToList();  // Added for DropDown
            SupContactDropDowndisp = _context.SupContactDropDown.ToList();  // Added for DropDown
            return Page();
        }

        [BindProperty]
        public TimeReport TimeReport { get; set; }
        public IEnumerable<Models.CusContactDropDown> CusContactDropDowndisp { get; set; }
        public IEnumerable<Models.SupContactDropDown> SupContactDropDowndisp { get; set; }
        public Models.PointsforSupContact PointsforSupContact { get; set; }

        // To protect from overposting attacks,enable the specific properties you want to bind to,for
        // more details,see https://aka.ms/RazorPagesCRUD.
        public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            TimeReport.TimeReportSupContactPointValue = (TimeReport.TimeReportHours * 10);

            _context.TimeReport.Add(TimeReport);
            await _context.SaveChangesAsync();

            //============================================
            // Adding new Point Record to supplier Contact
            //============================================
            PointsforSupContact.PointsId = TimeReport.TimeReportId;
            PointsforSupContact.PointsSupContactId = TimeReport.TimeReportsupplierTalentContactId;
            PointsforSupContact.PointsInternalUserId = 1;     // User 1 Christof Oberholzer must be entered in Contacts and User
            PointsforSupContact.PointsDate = TimeReport.TimeReportDate;
            PointsforSupContact.PointsTotal = TimeReport.TimeReportSupContactPointValue;
            PointsforSupContact.PointsText = TimeReport.TimeReportText;
            PointsforSupContact.PointsTitle = "TimeReporting Points";

            _context.PointsforSupContact.Add(PointsforSupContact);
            await _context.SaveChangesAsync();



            return RedirectToPage("/TimeReportOverview/Index");
        }
    }
}

==== 我的主页 ======

@page
@using Microsoft.AspNetCore.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@model WorkCollaboration.Pages.TimeReports.CreateModel

@{
    ViewData["Title"] = "Create";
    ViewData["RandomId"] = Guid.NewGuid().GetHashCode();
}

@inject IViewLocalizer Localizer

<h1>Create</h1>
<h4>TimeReport</h4>
<p>
    <a asp-page="/TimeReportOverview/Index">Back to Index</a>
</p>
<hr />
<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <input type="hidden" asp-for="TimeReport.TimeReportSupContactPointValue" value="0"/>
            <div class="form-group">
                <label asp-for="TimeReport.TimeReportId" class="control-label"></label>
                <input asp-for="TimeReport.TimeReportId" value='@ViewData["RandomId"]' readonly="readonly" class="form-control" />
                <span asp-validation-for="TimeReport.TimeReportId" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="TimeReport.TimeReportCustomerNeedContactId" class="control-label"></label>
            </div>
            <select id="CusContactId" asp-for="CusContactDropDowndisp" asp-items="@(new SelectList(Model.CusContactDropDowndisp,"CusContactId","CusFullName"))">
                <option value="" selected disabled>--Choose Customer--</option>
            </select>
            <div class="form-group">
                <input asp-for="TimeReport.TimeReportCustomerNeedContactId" readonly="readonly" class="form-control" />
                <span asp-validation-for="TimeReport.TimeReportCustomerNeedContactId" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="TimeReport.TimeReportsupplierTalentContactId" class="control-label"></label>
            </div>
            <select id="SupContactId" asp-for="SupContactDropDowndisp" asp-items="@(new SelectList(Model.SupContactDropDowndisp,"SupContactId","SupFullName"))">
                <option value="" selected disabled>--Choose supplier--</option>
            </select>
            <div class="form-group">
                <input asp-for="TimeReport.TimeReportsupplierTalentContactId" readonly="readonly" class="form-control" />
                <span asp-validation-for="TimeReport.TimeReportsupplierTalentContactId" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="TimeReport.TimeReportDate" class="control-label"></label>
                <input type="datetime-local" asp-for="TimeReport.TimeReportDate" class="form-control" />
                <span asp-validation-for="TimeReport.TimeReportDate" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="TimeReport.TimeReportHours" class="control-label"></label>
                <input asp-for="TimeReport.TimeReportHours" class="form-control" />
                <span asp-validation-for="TimeReport.TimeReportHours" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="TimeReport.TimeReportText" class="control-label"></label>
                <input asp-for="TimeReport.TimeReportText" class="form-control" />
                <span asp-validation-for="TimeReport.TimeReportText" class="text-danger"></span>
            </div>
            <div class="form-group">
                @Html.LabelFor(model => model.TimeReport.TimeReportState,htmlAttributes: new { @class = "form-group" })
                <div class="form-group">
                    @Html.DropDownListFor(model => model.TimeReport.TimeReportState,new List<SelectListItem>
                    {
                        new SelectListItem {Text = "Gebucht",Value = "Reported",Selected = true },new SelectListItem {Text = "Kontrolliert",Value = "Controlled" },new SelectListItem {Text = "Verrechnet / Noch nicht bezahlt",Value = "Invoiced / Not yet payed" },new SelectListItem {Text = "Verrechnet / Bezahlt",Value = "Invoiced / Payed" },},new { @class = "form-control" })
                    @Html.ValidationMessageFor(model => model.TimeReport.TimeReportState,"",new { @class = "text-danger" })
                </div>
             </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
                <a href="/TimeReportOverview/Index" class="btn btn-primary">Back to List</a>
            </div>
        </form>
    </div>
</div>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
<script>
    $("#CusContactId").on("change",function () {
        $("#TimeReport_TimeReportCustomerNeedContactId").val($("#CusContactId").val());
    });
    $("#SupContactId").on("change",function () {
        $("#TimeReport_TimeReportsupplierTalentContactId").val($("#SupContactId").val());
    });
</script>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

感谢您的帮助

解决方法

首先在您看来:

ViewData["RandomId"] = Guid.NewGuid().GetHashCode();

GetHashCode 方法使 Guid 变为 int,请确保它与您模型中的类型相匹配。

那么添加新的PointsforSupContact的正确方法是新建一个PointsforSupContact,所以需要删除代码:

 public Models.PointsforSupContact PointsforSupContact { get; set; }

并将您的代码更改为:

 //...
 await _context.SaveChangesAsync();
 //add this line
 var PointsforSupContact=new PointsforSupContact();
 PointsforSupContact.PointsId = TimeReport.TimeReportId;
 //...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?