输入数据以从视图中列出,ASP.NET Core MVC

时间:2018-07-06 13:17:14

标签: c# asp.net asp.net-mvc asp.net-core-mvc

我正在使用MVC开发Web应用程序,并尝试学习,我仍然是C#和HTML的入门者,但是我开始了解这个概念。

该应用程序应该处理时间报告,用户可以在其中创建时间报告,并输入诸如我可以创建的工作类型以及他/她从事的工作顺序之类的事情。尽管我希望能够将多个开始和停止时间添加到单个timereport中,例如:

(抱歉瑞典语和英语的混合使用...)

User: Emil
Order: 001
Type: Ordertime

Times:
Start 08:00, Stop 12:00
Start 13:00, Stop 18:30
Start 18:45, Stop 19:30
Start 20:50, Stop 22:10
etc...

模型:

namespace YttecData.Models 
{
    public class TidRapportKlocka
    {
        [Display(Name = "Starttid")]
        public DateTime StartTid;

        [Display(Name = "Sluttid")]
        public DateTime SlutTid;
    }

    public class TidRapport
    {
        [Display(Name = "Id")]
        public int Id { get; set; }

        [Display(Name = "User")]
        public String User { get; set; }

        [Display(Name = "Order")]
        public String Order { get; set; } 

        [Display(Name = "Tidstyp")]
        public TidsTyp Tid { get; set; }

        [Display(Name = "Klockslag")]
        public List<TidRapportKlocka> StartStopTider = new List<TidRapportKlocka>();

        public int StartStopTiderCount = 0;
    }
}

控制器:

[HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult TidRapportNy(TidRapportEditModel model)
    {
        if (ModelState.IsValid)
        {
            var nyTidRapport = new TidRapport
            {
                User = model.User,
                Tid = model.Tid,
                Order = model.Order,
                StartStopTider = model.StartStopTider
            };

            nyTidRapport = _tidRapportData.Add(nyTidRapport);

            return RedirectToAction(nameof(TidRapportDetaljer), new { id = nyTidRapport.Id });
        }

        else

        {
            return View();
        }
    }

显示详细信息视图:(显示了一些我已硬编码到服务中的时间报告,因为它尚未连接到数据库,因此可以正常工作并显示报告中输入的所有时间!)

@model YttecData.Models.TidRapport

<h2>Tidrapport nr: @Model.Id</h2>

<div>
    <label asp-for="Tid"></label>
    @Model.Tid
</div>

<div>
    <label asp-for="Order"></label>
    @Model.Order
</div>

<div>
    <label asp-for="User"></label>
    @Model.User
</div>

<br />

<h3>Klockslag</h3>
@foreach (var TidRapportKlocka in Model.StartStopTider)
{
    <div>
        <label>Start:</label>
        @TidRapportKlocka.SlutTid.TimeOfDay
        <label>Stop:</label>
        @TidRapportKlocka.StartTid.TimeOfDay
    </div>
}

<a asp-action="TidRapport" asp-controller="TidRapport">Tillbaks till tidrapporter</a>

创建视图:(这是我需要帮助的地方,我不确定如何从视图向单个报告多次输入

@using YttecData.Models
@model YttecData.Models.TidRapport

<h1>Ny tidrapport</h1>

<form method="post">

    @*<div asp-validation-summary="All"></div>*@

    <div>
        <label asp-for="User"></label>
        <input asp-for="User" />
        <span asp-validation-for="User"></span>
    </div>

    <div>
        <label asp-for="Order"></label>
        <input asp-for="Order" />
        <span asp-validation-for="Order"></span>
    </div>

    <div>
        <label asp-for="Tid"></label>
        <select asp-for="Tid"
                asp-items="@Html.GetEnumSelectList<TidsTyp>()"></select>
        <span asp-validation-for="Tid"></span>
    </div>

    <div>
        <label>StartTid</label>
        <input asp-for="StartStopTider[1].StartTid" />
    </div>

    <div>
        <label>StopTid</label>
        <input asp-for="StartStopTider[1].StartTid" />
    </div>

    <div>
        <input type="submit" name="Spara" value="Save" />
    </div>

</form>

当我运行应用程序时,上面的代码为我提供了正确的控件,尽管它只为我提供了添加一次的选项,并且当我进入显示详细信息视图时,它似乎没有保存任何时间值新创建的报告。我已经尝试了许多不同的方法,并且在大多数情况下,我遇到了一个问题,即我无法将void隐式转换为对象,而且我不确定从何处去。

即,如果我只是尝试在创建视图中添加一条时间(没有来自html控件的任何输入),则出现以下错误:

@Model.StartStopTider.Add(new TidRapportKlocka { StartTid = new DateTime(2018, 01, 01, 11, 10, 00), SlutTid = new DateTime(2018, 01, 01, 12, 20, 00) })

感谢任何帮助或一般性建议!

// Emil

0 个答案:

没有答案