Я знаю, что об этом спрашивали несколько раз, но, похоже, я не очень понимаю.
Модель (и дополнительный класс)
namespace ScoutGest.Models
{
public class InserirEscuteiroViewModel
{
[Required(ErrorMessage = "Por favor, insira o nome")]
public string Nome { get; set; }
[Required(ErrorMessage = "Por favor, insira o totem")]
public string Totem { get; set; }
[Required(ErrorMessage = "Por favor, insira o(s) cargo(s)")]
[MaxLength(3, ErrorMessage = "O limite está definido para 3 cargos. Por favor, selecione apenas 3 cargos.")]
[MinLength(1, ErrorMessage = "Por favor, insira pelo menos um cargo")]
public List<Cargos> Cargo { get; set; }
[Required(ErrorMessage = "Por favor, insira o telemóvel")]
[StringLength(9, ErrorMessage = "Telemóvel incompleto; por favor, insira 9 dígitos")]
public string NumTelefone { get; set; }
[Required(ErrorMessage = "Por favor, insira a morada")]
[StringLength(50)]
public string Morada { get; set; }
[Required(ErrorMessage = "Por favor, insira a cidade")]
[StringLength(50)]
public string Morada2 { get; set; }
[Required(ErrorMessage = "Por favor, insira o código-postal")]
[StringLength(8)]
public string CodPostal { get; set; }
[Required(ErrorMessage = "Por favor, insira o grupo sanguíneo")]
[StringLength(2)]
public string GrupoSanguineo { get; set; }
[StringLength(65536)]
public string Alergias { get; set; }
[StringLength(65536)]
public string Medicacao { get; set; }
[StringLength(65536)]
public string Problemas { get; set; }
[StringLength(256)]
public string Observacoes { get; set; }
[Required(ErrorMessage = "Por favor, selecione a secção")]
public string Seccao { get; set; }
[Required(ErrorMessage = "Por favor, selecione o estado")]
public string Estado { get; set; }
[Required(ErrorMessage = "Por favor, introduza a idade")]
public int Idade { get; set; }
public IFormFile Foto { get; set; }
}
}
public class Cargos
{
public string Cargo { get; set; }
public bool Selecionado { get; set; }
}
}
Контроллер (соединение с базой данных все еще выполняется)
public class InserirEscuteiroController : Controller
{
[HttpGet]
[Route("/InserirEscuteiroController/", Name = "InserirEscuteiroGet")]
public IActionResult Index()
{
return View("InserirEscuteiro", new InserirEscuteiroViewModel());
}
[HttpPost]
[Route("/InserirEscuteiroController/Index", Name = "InserirEscuteiroPost")]
public IActionResult InserirEscuteiro(InserirEscuteiroViewModel insert)
{
try
{
using (MySqlCommand cmd = new MySqlCommand("insert into escuteiros(Nome, Totem, Foto, Seccao, Estado, Cargo, Idade, NumTelefone, Morada, Morada2, CodPostal, GrupoSanguineo, Alergias, Medicacao, Problemas, Observacoes) values(@nome, @totem, @foto, @seccao, @estado, @cargos, @idade, @telefone, @morada, @morada2, @codpostal, @gruposanguineo, @alergias, @medicacao, @problemas, @observacoes)", new MySqlConnection("server=localhost; port=3306; database=scoutgest; user=root")))
{
cmd.Parameters.AddWithValue("@nome", insert.Nome);
cmd.Parameters.AddWithValue("@totem", insert.Totem);
if (insert.Foto == null)
{
using (MySqlCommand cmd2 = new MySqlCommand("select Foto from escuteiros where IDEscuteiro = 0", cmd.Connection))
{
if (cmd2.Connection.State == System.Data.ConnectionState.Closed) cmd2.Connection.Open();
using (MySqlDataReader dr2 = cmd2.ExecuteReader()) while (dr2.Read()) cmd.Parameters.AddWithValue("@foto", dr2["Foto"]);
}
}
else
{
using (MemoryStream ms = new MemoryStream())
{
byte[] foto = new byte[0];
insert.Foto.OpenReadStream().Read(foto, 0, (int)insert.Foto.OpenReadStream().Length);
ms.Write(foto);
cmd.Parameters.AddWithValue("@foto", ms.ToArray());
}
}
using (MySqlCommand cmd3 = new MySqlCommand("select IDSeccao from seccoes where Nome = @seccao", cmd.Connection))
{
cmd3.Parameters.AddWithValue("@seccao", insert.Seccao);
cmd3.Prepare();
using (MySqlDataReader dr3 = cmd3.ExecuteReader()) while (dr3.Read()) cmd.Parameters.AddWithValue("@seccao", dr3["IDSeccao"]);
cmd3.CommandText = "select IDEstado from estados where Descricao = @estado";
cmd3.Parameters.AddWithValue("@estado", insert.Estado);
using (MySqlDataReader dr4 = cmd3.ExecuteReader()) while (dr4.Read()) cmd.Parameters.AddWithValue("@estado", dr4["IDEstado"]);
}
cmd.Parameters.AddWithValue("@cargos", insert.Cargo);
cmd.Parameters.AddWithValue("@idade", insert.Idade);
cmd.Parameters.AddWithValue("@telefone", "+351" + insert.NumTelefone);
cmd.Parameters.AddWithValue("@morada", insert.Morada);
cmd.Parameters.AddWithValue("@morada2", insert.Morada2);
cmd.Parameters.AddWithValue("@codpostal", insert.CodPostal);
cmd.Parameters.AddWithValue("@gruposanguineo", insert.GrupoSanguineo);
cmd.Parameters.AddWithValue("@alergias", insert.Alergias);
cmd.Parameters.AddWithValue("@medicacao", insert.Medicacao);
cmd.Parameters.AddWithValue("@problemas", insert.Problemas);
cmd.Parameters.AddWithValue("@observacoes", insert.Observacoes);
cmd.Prepare();
cmd.ExecuteNonQuery();
}
return View("../../Controllers/HomeController/Index");
}
catch (MySqlException mse)
{
ModelState.AddModelError("Erro de inserção na base de dados", mse.Message);
Console.WriteLine(ModelState.ErrorCount);
return View("InserirEscuteiro");
}
}
}
Просмотр
@model ScoutGest.Models.InserirEscuteiroViewModel
@{
ViewData["Title"] = "InserirEscuteiro";
Layout = "~/Views/Shared/_MasterPage.cshtml";
}
<h1>Inserir escuteiro</h1>
<h4>Dados</h4>
<hr />
<div class="text-center">
<form asp-route="InserirEscuteiroPost" class="row" style="margin:auto" method="post">
<div asp-validation-summary="ModelOnly" class="text-danger" />
<div class="form-group col-xl-3 text-sm-left">
<label asp-for="Nome">Nome:</label>
<input asp-for="Nome" /><br />
<div class="bg-danger rounded-lg text-center">@Html.ValidationMessageFor(x => x.Nome)</div>
<br />
<label asp-for="Totem">Totem:</label>
<input asp-for="Totem" />
<div class="bg-danger rounded-lg text-center">@Html.ValidationMessageFor(x => x.Totem)</div>
<br />
<label asp-for="Seccao">Secção:</label>
<select asp-for="Seccao">
<option>Lobitos</option>
<option>Exploradores</option>
<option>Pioneiros</option>
<option>Caminheiros</option>
<option>Dirigentes</option>
</select>
<br />
<label asp-for="Estado">Estado da promessa:</label>
<select asp-for="Estado">
<option>Inscrito</option>
<option>Noviço</option>
<option>Aspirante</option>
<option>Promessa feita</option>
</select>
<br />
<label asp-for="Foto">Fotografia:</label>
<input asp-for="Foto" type="file" accept=".jpg,.png" />
</div>
<div class="col-xl-3 text-sm-left">
<partial name="Partial/_CheckBoxList" />
</div>
<div class="col-xl-3 text-sm-left">
<label asp-for="Idade">Idade:</label>
<input asp-for="Idade" type="number" min="6" max="150" />
<div class="bg-danger rounded-lg text-center">@Html.ValidationMessageFor(x => x.Idade)</div>
<br />
<label asp-for="NumTelefone">Telefone: +351</label>
<input asp-for="NumTelefone" />
<br />
<label asp-for="Morada">Morada:</label>
<input asp-for="Morada" />
<div class="bg-danger rounded-lg text-center">@Html.ValidationMessageFor(x => x.Morada)</div>
<br />
<label asp-for="Morada2">Cidade:</label>
<input asp-for="Morada2" />
<div class="bg-danger rounded-lg text-center">@Html.ValidationMessageFor(x => x.Morada2)</div>
<br />
<label asp-for="CodPostal">Código-postal:</label>
<input asp-for="CodPostal" />
<div class="bg-danger rounded-lg text-center">@Html.ValidationMessageFor(x => x.CodPostal)</div>
<br />
</div>
<div class="col-xl-3 text-sm-left">
<label asp-for="GrupoSanguineo">Grupo sanguíneo:</label>
<select asp-for="GrupoSanguineo">
<option>A+</option>
<option>A-</option>
<option>B+</option>
<option>B-</option>
<option>AB+</option>
<option>AB-</option>
<option>O+</option>
<option>O-</option>
</select>
<br />
<label asp-for="Alergias">Alergias:</label>
<input asp-for="Alergias" type="text" />
<br />
<label asp-for="Medicacao">Medicação:</label>
<input asp-for="Medicacao" type="text" />
<br />
<label asp-for="Problemas">Problemas de saúde:</label>
<input asp-for="Problemas" type="text" />
<br />
<label asp-for="Observacoes">Observações:</label>
<input asp-for="Observacoes" type="text" />
<br />
</div>
<input class="text-center btn btn-primary container-fluid" type="submit" value="Create" />
</form>
</div>
<p class="text-center">
<a asp-action="Index">Voltar à listagem</a>
</p>
Частичный вид: «_CheckBoxList»
@model ScoutGest.Models.InserirEscuteiroViewModel
<label asp-for="Cargo">Cargo:</label>
<div>
@{ScoutGest.Models.Cargos[] cargos = new ScoutGest.Models.Cargos[11] { new ScoutGest.Models.Cargos() { Cargo = "Guia", Selecionado = false }, new ScoutGest.Models.Cargos() { Cargo = "Animador", Selecionado = false }, new ScoutGest.Models.Cargos() { Cargo = "Cozinheiro", Selecionado = false }, new ScoutGest.Models.Cargos() { Cargo = "Guarda-material", Selecionado = false }, new ScoutGest.Models.Cargos() { Cargo = "Secretário", Selecionado = false }, new ScoutGest.Models.Cargos() { Cargo = "Tesoureiro", Selecionado = false }, new ScoutGest.Models.Cargos() { Cargo = "Relações públicas", Selecionado = false }, new ScoutGest.Models.Cargos() { Cargo = "Socorrista", Selecionado = false }, new ScoutGest.Models.Cargos() { Cargo = "Guia de região", Selecionado = false }, new ScoutGest.Models.Cargos() { Cargo = "Sub-guia", Selecionado = false }, new ScoutGest.Models.Cargos() { Cargo = "Chefe", Selecionado = false } };}
@for (var i = 1; i < 12; i++)
{
<input class="cargo" id="@cargos[i - 1].Cargo.ToLower()" type="checkbox" asp-for="Cargo[i].Selecionado" onclick="return selectiveCheck()" />
<label asp-for="Cargo[i].Selecionado">@cargos[i - 1].Cargo</label>
<input type="hidden" asp-for="Cargo[i].Cargo" />
<br />
}
</div>
<div class="bg-danger rounded-lg text-center">@Html.ValidationMessageFor(x => x.Cargo)</div>
Моя проблема в том, когда я нажимаю «Создать» в представлении, элемент списка не содержит элементов внутри. Я знаю, что это было показано во многих других вопросах, но я все еще не могу получить ответ, даже если он находится прямо у меня под носом. Кто-нибудь может мне помочь? Спасибо