[英]ASP.NET MVC how to create a model which pulls in data from 2 tables, to display in 1 view
[英]Insert data to multiple tables in Create View ASP.Net MVC
我試圖將數據插入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; }
}
}
我為用戶和WorkingHours添加了兩個部分視圖 :
用戶局部視圖:
@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>
WorkingHours部分視圖
@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
。 不知道這是否適用於列表而不是對象,如上面的鏈接所示。
UPDATE
我可以通過將User
對象傳遞給Create
方法中的View
來解決此問題。
public ActionResult Create()
{
User u = new Common.User();
return View(u);
}
並在User
構造函數中填充WorkingHours
列表。
將partial的模型更改為User
並渲染編輯器,如下所示:
@Html.EditorFor(model => model.WorkingHours.HoursFrom)
我已經通過在Create
方法中將User
對象傳遞給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
});
}
在這種情況下,這是有意義的,因為列表具有每天的默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.