Отправить список флажков модели в ASP. NET Core - PullRequest
0 голосов
/ 28 мая 2020

Я знаю, что об этом спрашивали несколько раз, но, похоже, я не очень понимаю.

Модель (и дополнительный класс)

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>

Моя проблема в том, когда я нажимаю «Создать» в представлении, элемент списка не содержит элементов внутри. Я знаю, что это было показано во многих других вопросах, но я все еще не могу получить ответ, даже если он находится прямо у меня под носом. Кто-нибудь может мне помочь? Спасибо

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