将数据插入到创建视图 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
列表。
将 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
});
}
在这种情况下,这是有意义的,因为列表每天都有默认值。