【发布时间】:2021-06-22 16:26:23
【问题描述】:
我正在使用 ASP.Net Core 5.0
我有一个视图模型 -
using YellowFeverPortal.Web.Models;
using System.Collections.Generic;
using System.Linq;
namespace YellowFeverPortal.Web.ViewModels
{
public class RegistrationListViewModel
{
public List<Registration> allRegistrations { get; set; }
public Registration theRegistration { get; set; }
public Registration theFirstRegistration { get; set; }
public int clinicId { get; set; }
public string clinicShortCode { get; set; }
}
}
我有一个使用视图模型的剃刀视图 -
@model RegistrationListViewModel
@{
ViewData["Title"] = "Registration";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<form method="post" asp-controller="registration" asp-action="registration">
<div class="card border border-1">
<div class="card-header font-weight-bold">
@Model.vaccinationClinicShortCode - Current Registration
<button type="button" class="btn-sm btn-primary float-right" onClick="history.go(-1); return false;" title="Click to confirm designation renewals">Back</button>
</div>
</div>
<div class="form">
<div asp-validation-summary="ModelOnly"></div>
<input id="vaccClinicId" asp-for="vaccinationClinicId" class="form-control" style="display:none" />
<input id="vaccClinicShortCodeId" asp-for="vaccinationClinicShortCode" class="form-control" style="display:none" />
<input id="regId" asp-for="theRegistration.Id" class="form-control" style="display:none" />
<input id="regsId" asp-for="allRegistrations" class="form-control" style="display:none" />
<fieldset class="form-group">
<div class="form-row mt-2 ml-2">
<div class="col-md-3 mb-2">
<label asp-for="theRegistration.CodeOfPracticeReceived" class="control-label">Code of Practice Received</label>
</div>
<div class="col-md-3 mb-2">
<input id="codeOfPracRecvdId" type="checkbox" asp-for="theRegistration.CodeOfPracticeReceived" />
<span asp-validation-for="theRegistration.CodeOfPracticeReceived" class="text-danger"></span>
</div>
<div class="col-md-3 mb-2">
<label asp-for="theRegistration.CertificateSent" class="control-label">Certificate Sent</label>
</div>
<div class="col-md-3 mb-2">
<input id="certSentId" type="checkbox" asp-for="theRegistration.CertificateSent" />
<span asp-validation-for="theRegistration.CertificateSent" class="text-danger"></span>
</div>
</div>
<div class="form-row ml-2">
<div class="col-md-3 mb-2">
<label asp-for="theRegistration.RegisteredAt" class="control-label">Designation Date</label>
</div>
<div class="col-md-3 mb-2">
<input id="registeredAtId" type="date" asp-for="theRegistration.RegisteredAt" />
<span asp-validation-for="theRegistration.RegisteredAt" class="text-danger"></span>
</div>
<div class="col-md-3 mb-2">
<label asp-for="theRegistration.CertificateSentAt" class="control-label">Certificate Sent Date</label>
</div>
<div class="col-md-3 mb-2">
<input id="certSentDateId" type="date" asp-for="theRegistration.CertificateSentAt" />
<span asp-validation-for="theRegistration.CertificateSentAt" class="text-danger"></span>
</div>
</div>
<div class="form-row ml-2">
<div class="col-md-3 mb-2">
<label asp-for="theRegistration.InvoiceNumber" class="control-label">Invoice Number</label>
</div>
<div class="col-md-3 mb-2">
<input id="invoiceNumberId" asp-for="theRegistration.InvoiceNumber" />
<span asp-validation-for="theRegistration.InvoiceNumber" class="text-danger"></span>
</div>
<div class="col-md-3 mb-2">
<label asp-for="theRegistration.SanofiInformed" class="control-label">Sanofi Informed</label>
</div>
<div class="col-md-3 mb-2">
<input id="sanofiInformedId" type="checkbox" asp-for="theRegistration.SanofiInformed" />
<span asp-validation-for="theRegistration.SanofiInformed" class="text-danger"></span>
</div>
</div>
<div class="form-row ml-2">
<div class="col-md-3 mb-2">
<label asp-for="theRegistration.InvoiceSentAt" class="control-label">Invoice Date</label>
</div>
<div class="col-md-3 mb-2">
<input id="invoiceSentAtId" type="date" asp-for="theRegistration.InvoiceSentAt" />
<span asp-validation-for="theRegistration.InvoiceSentAt" class="text-danger"></span>
</div>
<div class="col-md-3 mb-2">
<label asp-for="theRegistration.NumberOfYearsId" class="control-label">Number of Years to Renewal</label>
</div>
<div class="col-md-3 mb-2">
<select id="numOfYearsId" asp-for="theRegistration.NumberOfYearsId" asp-items="@(new SelectList(ViewBag.NumberOfYearsList, "Id", "TheNumberOfYears"))" style="height: 37px;">
<option value='0' className='display-none'>Please Select...</option>
</select>
<span asp-validation-for="theRegistration.NumberOfYearsId" class="text-danger"></span>
</div>
</div>
<div class="form-row">
<div class="col-md-12 mb-2">
<input type="submit" value="Submit" name="Submit" class="btn btn-success float-right" id="SubmitForm" />
</div>
</div>
</fieldset>
<div class="card border border-1">
<div class="card-header font-weight-bold">
First Registration
</div>
</div>
<fieldset class="form-group">
<table class="table table-bordered table-striped table-hover" style="border: 1px solid darkgray">
<thead>
<tr>
<td>Designation Form Received</td>
<td>Code Of Practice Received</td>
<td>Designation Date</td>
<td>Certificate Sent</td>
<td>Certificate Sent Date</td>
<td>Invoice Number</td>
</tr>
</thead>
<tbody>
<tr>
<td class="text-center">@Model.theFirstRegistration.RegistrationFormReceived</td>
<td class="text-center">@Model.theFirstRegistration.CodeOfPracticeReceived</td>
<td class="text-center">@(Model.theFirstRegistration.RegisteredAt.HasValue ? Model.theFirstRegistration.RegisteredAt.Value.ToString("dd/MM/yyyy") : "")</td>
<td class="text-center">@Model.theFirstRegistration.CertificateSent</td>
<td class="text-center">@(Model.theFirstRegistration.CertificateSentAt.HasValue ? Model.theFirstRegistration.CertificateSentAt.Value.ToString("dd/MM/yyyy") : "")</td>
<td class="text-center">@Model.theFirstRegistration.InvoiceNumber</td>
</tr>
</tbody>
</table>
</fieldset>
<div class="card border border-1">
<div class="card-header font-weight-bold">
Subsequent Registrations
</div>
</div>
<!--
<fieldset class="form-group">
<table class="table table-bordered table-striped table-hover" style="border: 1px solid darkgray">
<thead>
<tr>
<td>Code Of Practice Received</td>
<td>Designation Date</td>
<td>Certificate Sent</td>
<td>Certificate Sent Date</td>
<td>Invoice Number</td>
</tr>
</thead>
<tbody>
<tr>
@for (int i = 0; i < Model.allRegistrations.Count(); i++)
{
if (Model.allRegistrations[i].RegisteredAt != Model.theFirstRegistration.RegisteredAt && Model.allRegistrations[i].RegisteredAt != Model.theRegistration.RegisteredAt)
{
<td class="text-center">@Model.allRegistrations[i].CodeOfPracticeReceived</td>
<td class="text-center">@(Model.allRegistrations[i].RegisteredAt.HasValue ? Model.allRegistrations[i].RegisteredAt.Value.ToString("dd/MM/yyyy") : "")</td>
<td class="text-center">@Model.allRegistrations[i].CertificateSent</td>
<td class="text-center">@(Model.allRegistrations[i].CertificateSentAt.HasValue ? Model.allRegistrations[i].CertificateSentAt.Value.ToString("dd/MM/yyyy") : "")</td>
<td class="text-center">@Model.allRegistrations[i].InvoiceNumber</td>
}
}
</tr>
</tbody>
</table>
</fieldset> -->
</div>
</form>
我的控制器中有一个 post 方法 -
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Registration(RegistrationListViewModel registrationListViewModel)
{
if (!ModelState.IsValid)
{
return View("Registration", registrationListViewModel);
}
if (registrationListViewModel.allRegistrations is null || registrationListViewModel.allRegistrations.Count() == 0)
{
_registrationRepository.CreateRegistration(registrationListViewModel.theRegistration);
}
else
{
_registrationRepository.UpdateRegistration(registrationListViewModel.theRegistration);
}
return View(registrationListViewModel);
}
当我按下提交按钮时,allRegistrations 的数量为 0。应该有 1。这是传递给视图的 allRegistrations 的数量。
我什至有一个设置为 allRegistrations 的输入标签,但这没什么区别,它仍然返回 0 allRegistrations。
有什么想法吗?
谢谢
【问题讨论】:
-
您是否尝试删除 if (Model.allRegistrations[i].RegisteredAt != Model.theFirstRegistration.RegisteredAt && Model.allRegistrations[i].RegisteredAt != Model.theRegistration.RegisteredAt) ?跨度>
标签: asp.net-core model-view-controller