Ввод данных в список из представления, ASP.NET Core MVC - PullRequest
0 голосов
/ 06 июля 2018

Я работаю над веб-приложением, использующим MVC, и пытаюсь учиться по ходу дела, я все еще новичок в C # и HTML, но я начинаю понимать концепцию.

Приложение должно обрабатывать временные отчеты, где пользователь может создавать временные отчеты и вводить такие вещи, как тип работы и в каком порядке он / она работает, который я смог создать. Несмотря на то, что я хочу иметь возможность добавлять несколько времен запуска и остановки к одному отчету, например:

(простите за смесь шведского и английского ...)

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) с этой строкой, я получу ошибку void to object:

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

Любая помощь или общие советы приветствуются!

// Эмиль

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...