我正在使用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