将数据插入到创建视图 ASP.Net MVC 中的多个表中

本文关键字:MVC Net ASP 插入 数据 创建 视图 | 更新日期: 2023-09-27 18:35:07

我正在尝试将数据插入Create View中的两个表中。我有一个桌子User和另一个桌子WorkingHours.WorkingHours表定义每个User在一周内工作的小时数。我希望能够在添加用户的同时添加用户的WorkingHours,因此它必须是相同的View。我一直在查看如何做到这一点的示例,主要是使用 PartialViews .

我按照此示例将数据插入到Users表和WorkingHours表中。

这些是每个表的类(我在这里工作模型优先):

用户

namespace Common
{
    using System;
    using System.Collections.Generic;
    public partial class User
    {
        public User()
        {
            this.WorkingHours = new HashSet<WorkingHours>();
        }
        public int ID { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Email { get; set; }
        public string Password { get; set; }
        public virtual ICollection<WorkingDay> WorkingDays { get; set; }
    }
}

工作时间

namespace Common
{
    using System;
    using System.Collections.Generic;
    public partial class WorkingHours
    {
        public int ID { get; set; }
        public Nullable<int> WeekDay { get; set; }
        public Nullable<int> HoursFrom { get; set; }
        public Nullable<int> HoursTo { get; set; }
        public Nullable<int> UserId { get; set; }
        public virtual User User { get; set; }
    }
}

我为用户和工作时间添加了两个部分视图

用户部分视图:

    @model Common.User
    <script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<div class="editor-label">
    @Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Name)
    @Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
    @Html.LabelFor(model => model.Surname)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Surname)
    @Html.ValidationMessageFor(model => model.Surname)
</div>
<div class="editor-label">
    @Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Email)
    @Html.ValidationMessageFor(model => model.Email)
</div>
<div class="editor-label">
    @Html.LabelFor(model => model.Password)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Password)
    @Html.ValidationMessageFor(model => model.Password)
</div>

工作时间部分视图

@model Common.WorkingHours
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<div class="editor-label">
    @Html.LabelFor(model => model.WeekDay)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.WeekDay)
    @Html.ValidationMessageFor(model => model.WeekDay)
</div>
<div class="editor-label">
    @Html.LabelFor(model => model.HoursFrom)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.HoursFrom)
    @Html.ValidationMessageFor(model => model.HoursFrom)
</div>
<div class="editor-label">
    @Html.LabelFor(model => model.HoursTo)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.HoursTo)
    @Html.ValidationMessageFor(model => model.HoursTo)
</div>

部分视图组合:

@model Common.User
@{
    ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm("Create", "User", FormMethod.Post)) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    @Html.Partial("_UserCreate")
    @Html.Partial("_WorkingDayCreate", new ViewDataDictionary()
        {
            TemplateInfo = new TemplateInfo()
            {
                HtmlFieldPrefix = "WorkingDay"
            }
        }
    )
    <p>
        <input type="submit" value="Create" />
    </p>
}

创建用户时,对象确实具有用户详细信息...姓名,姓氏等,但不是WorkingHours,列表仍然null。我以为添加ViewDataDictionary可以解决问题,但列表仍然null.不确定这是否与列表而不是对象的工作方式不同,如上面的链接所示。

更新

我可以通过将User对象传递给Create方法中的View来解决此问题。

public ActionResult Create()
{
    User u = new Common.User();
    return View(u);
}

并在User构造函数中填充WorkingHours列表。

将数据插入到创建视图 ASP.Net MVC 中的多个表中

将 partial 的模型更改为 User 并像这样渲染编辑器:

@Html.EditorFor(model => model.WorkingHours.HoursFrom)

我已经通过将User对象传递给Create方法中的View来解决此问题。

public ActionResult Create()
{
    User u = new Common.User();
    return View(u);
}

我正在填充User构造函数中的WorkingHours列表:

// Monday to Friday (0 to 4 - using an enum: DaysEnum), default hours 08:00 to 17:00
for (int i = 0; i < 5; i++)
{
    this.WorkingHours.Add(new WorkingHour
    {
        WeekDay = i,
        HoursFrom = 8,
        HoursTo = 17
    });
}

在这种情况下,这是有意义的,因为列表每天都有默认值。