簡體   English   中英

將數據插入到Create View ASP.Net MVC中的多個表中

[英]Insert data to multiple tables in Create View ASP.Net MVC

我試圖將數據插入Create View兩個表中。 我所擁有的是一個表User和另一個表WorkingHours WorkingHours表定義每個User每周工作的小時數。 我希望能夠在添加用戶的同時添加用戶的WorkingHours ,因此它必須是相同的View 我一直在瀏覽示例如何做到這一點,主要是與PartialViews一起使用。

我已遵循此示例將數據插入到UsersWorkingHours表中。

這些是每個表的類(我在這里使用“ 模型優先” ):

用戶

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM