У меня есть выбор в представлении, который всегда возвращает 0 в мою модель представления, и я не знаю, почему:
Просмотр модели:
// CreateLifeInsuranceViewModel.cs
using InsuranceListManager.Models.EntityFrameworkModels;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace InsuranceListManager.Models.ViewModels.Home
{
public class CreateLifeInsuranceViewModel
{
[Required]
public int CustomerId;
public IList<CustomerModel> Customers { get; set; }
[Required]
public string InsuredPersonCPF { get; set; }
}
}
Контроллер
public class HomeController
{
public IActionResult CreateLifeInsurance()
{
var customers = (
from c in _db.Customers select c
).ToList();
var model = new CreateLifeInsuranceViewModel
{
Customers = customers
};
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateLifeInsurance(CreateLifeInsuranceViewModel model)
{
if (ModelState.IsValid)
{
var category = _db.InsuranceCategories.Where(c => c.Id == InsuranceCategoryModel.LIFE_INSURANCE).First();
var insurance = new InsuranceModel
{
CategoryId = category.Id,
CustomerId = model.CustomerId
};
_db.Add(insurance);
await _db.SaveChangesAsync();
var lifeInsurance = new LifeModel
{
InsuranceId = insurance.Id,
InsuredPersonCPF = model.InsuredPersonCPF
};
_db.Add(lifeInsurance);
await _db.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return BadRequest(ModelState);
}
}
Вид:
@model InsuranceListManager.Models.ViewModels.Home.CreateLifeInsuranceViewModel
@{
ViewData["Title"] = "New Insurance";
}
<h1>New Insurance</h1>
<hr />
<form asp-action="CreateLifeInsurance">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-row">
<div class="form-group col-sm-6">
<label asp-for="CustomerId">Customer</label>
<select class="form-control" asp-for="CustomerId" asp-items="@(new SelectList(Model.Customers, "Id", "Name"))">
<option value="">Select the customer</option>
</select>
<span asp-validation-for="CustomerId" class="text-danger"></span>
</div>
<div class="form-group col-sm-6">
<label asp-for="InsuredPersonCPF">Insured Person CPF</label>
<input type="text" class="form-control" asp-for="InsuredPersonCPF" placeholder="CPF" />
<span asp-validation-for="InsuredPersonCPF" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
<a class="btn" asp-action="Index">Cancel</a>
</div>
</form>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
в отображаемом HTML, выбор имеет правильные значения, как вы можете видетьна скриншоте:
Но по какой-то причине значение, которое я получаю от этого выбора в модели представления, всегда равно нулю:
Кроме того, проверка asp не сработает, если я не выберу какой-либо предмет из списка.
Я исследовал этоза последние 4 часа и не обнаружил ни одной подобной проблемы.
Я использую Asp.Net MVC Core 2, .Net Core SDK 2.2, Windows 10 Pro и Visual Studio 2017 Community Edition.