Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [MVC] Form che sembra autoinviarsi

    ciao!

    ho una pagina con un form di questo tipo:
    codice:
    @model NuovoPianoLavoroModel
    
    <div class="container div_page_cont div_page_cont_nuovo">
        <div class="card">
            <div class="card-body">
                @Html.ValidationSummary()
    
                @using (Html.BeginForm("PianoLavoro", "Nuovo", FormMethod.Post, new { id = "nuovo_mug_form" }))
                {
                    @Html.AntiForgeryToken()
                    
                    ............
                }
            </div>
        </div>
    </div>
    
    @section scripts {
        @Scripts.Render("~/js/validation")
    }
    il model richiamato è questo:
    codice:
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Web.Mvc;
    
    namespaceModels.PianoLavoro
    {
        public class NuovoPianoLavoroModel
        {
    
            public IEnumerable<SelectListItem> TipologiaPianoLavoro { get; set; }
    
            [Display(Name = "Descrizione")]
            public string Descrizione { get; set; }
    
            [Display(Name = "Presidio")]
            public string Presidio { get; set; }
    
            [Display(Name = "Tipologia")]
            [Range(1, long.MaxValue, ErrorMessage = "Il campo {0} è obbligatorio.")]
            public long Tipologia { get; set; }
        }
    
        public class PianoLavoroTipo
        {
            [Display(Name = "Id")]
            public long Id { get; set; }
    
            [Display(Name = "Tipologia")]
            public string Tipologia { get; set; }
        }
    }
    e questo il controller:
    codice:
    using Easymatica.Somministrazione.Web.UI.Models.PianoLavoro;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web.Mvc;
    
    namespace Controllers
    {
        public class PianoLavoroController : Controller
        {
            public ActionResult Index()
            {
                return View();
            }
    
            public ActionResult Nuovo(NuovoPianoLavoroModel model)
            {
                if (model == null)
                {
                    model = new NuovoPianoLavoroModel();
                }
    
                List<PianoLavoroTipo> list = new List<PianoLavoroTipo>
                {
                    new PianoLavoroTipo
                    {
                        Id = 1,
                        Tipologia = "Tipologia 1"
                    },
                    new PianoLavoroTipo
                    {
                        Id = 2,
                        Tipologia = "Tipologia 2"
                    }
                };
    
                model.TipologiaPianoLavoro = list.Select(x =>
                    new SelectListItem()
                    {
                        Value = x.Id.ToString(),
                        Text = x.Tipologia
                    }
                );
    
                return View(model);
            }
        }
    }
    quando accedo alla pagina mi compaiono gli errori che i campi sono obbligatori, ma senza inviare il form.
    che se si autoinviasse.
    avete un'idea del perchè??

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    a naso dipende da qualcosa di esterno..
    Ultima modifica di djciko; 21-02-2020 a 09:32

  3. #3
    Quote Originariamente inviata da djciko Visualizza il messaggio
    a naso dipende da qualcosa di esterno..
    tipo??

    non ho proprio la minima idea.

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Forse ho capito:

    codice:
    [Display(Name = "Tipologia")]
    [Range(1, long.MaxValue, ErrorMessage = "Il campo {0} è obbligatorio.")]
    public long Tipologia { get; set; }

    probabilmente è null il campo Tipologia ed il range scatta da solo: prova a mettere da 0 a long.MaxValue
    Ultima modifica di djciko; 25-02-2020 a 12:04

  5. #5
    Quote Originariamente inviata da djciko Visualizza il messaggio
    Forse ho capito:

    codice:
    [Display(Name = "Tipologia")]
    [Range(1, long.MaxValue, ErrorMessage = "Il campo {0} è obbligatorio.")]
    public long Tipologia { get; set; }

    probabilmente è null il campo Tipologia ed il range scatta da solo: prova a mettere da 0 a long.MaxValue
    ciao!

    alla fine ho provato come dicevi, ma nulla.
    tra l'altro me lo fa anche in un'altra pagina con questo model:
    codice:
    using Web.UI.Models.Contratti;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using X.PagedList;
    
    namespace Web.UI.Models.Fornitori
    {
        public class FornitoriNuovoModel
        {
            [Display(Name = "Filtro")]
            public string SearchFilter { get; set; }
    
            public IPagedList<string> SearchResult { get; set; }
    
            [Display(Name = "Dettaglio")]
            public long Id { get; set; }
    
            [Required]
            [Display(Name = "Ragione Sociale")]
            public string RagioneSociale { get; set; }
    
            [Required]
            [Display(Name = "Indirizzo")]
            public string Indirizzo { get; set; }
    
            [Required]
            [Display(Name = "Partita IVA / Codice Fiscale")]
            public string PivaCf { get; set; }
    
            [Required]
            [Display(Name = "Cap")]
            public string Cap { get; set; }
    
            [Required]
            [Display(Name = "Città")]
            public string Citta { get; set; }
    
            [Required]
            [Display(Name = "Email aziendale")]
            public string EmailAziendale { get; set; }
    
            [Required]
            [Display(Name = "Iban Dedicato")]
            public string IbanDedicato { get; set; }
    
            [Required]
            [Display(Name = "Matricola Inps")]
            public string MatricolaInps { get; set; }
    
            [Required]
            [Display(Name = "Matricola Inail")]
            public string MatricolaInail { get; set; }
    
            [Required]
            [Display(Name = "Nome")]
            public string NomeRefAzienda { get; set; }
    
            [Required]
            [Display(Name = "Cognome")]
            public string CognomeRefAzienda { get; set; }
    
            [Required]
            [Display(Name = "Telefono")]
            public string TelefonoRefAzienda { get; set; }
    
            [Required]
            [Display(Name = "Email di contatto")]
            public string EmailContatto { get; set; }
    
            [Required]
            [Display(Name = "Pec")]
            public string Pec { get; set; }
    
            public IEnumerable<ContrattiResult> ListContratti { get; set; }
    
            public bool contrattoVisibile { get; set; }
        }
    }
    e le pagine dove ci sono form sono tutte uguali.
    nel senso che per crearne una nuova parto da una già fatta.
    su alcune ho questo problema, su altre no.

  6. #6
    vi faccio un altro esempio completo.
    questo il model:
    codice:
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Web.Mvc;
    
    namespace Easymatica.Somministrazione.Web.UI.Models.PianoLavoro
    {
        public class NuovoPianoLavoroModel
        {
    
            public IEnumerable<SelectListItem> TipologiaPianoLavoro { get; set; }
    
            [Required]
            [Display(Name = "Descrizione")]
            public string Descrizione { get; set; }
    
            [Required]
            [Display(Name = "Presidio")]
            public string Presidio { get; set; }
    
            [Required]
            [Display(Name = "Data Inizio")]
            public string DataInizio { get; set; }
    
            [Required]
            [Display(Name = "Data Fine")]
            public string DataFine { get; set; }
    
            [Required]
            [Display(Name = "Ora Inizio")]
            public string OraInizio { get; set; }
    
            [Required]
            [Display(Name = "Ora Fine")]
            public string OraFine { get; set; }
    
            [Display(Name = "Tipologia")]
            [Range(1, long.MaxValue, ErrorMessage = "Il campo {0} è obbligatorio.")]
            public long Tipologia { get; set; }
        }
    
        public class PianoLavoroTipo
        {
            [Display(Name = "Id")]
            public long Id { get; set; }
    
            [Display(Name = "Tipologia")]
            public string Tipologia { get; set; }
        }
    }
    questo il controller:
    codice:
    using Easymatica.Somministrazione.Web.UI.Models.PianoLavoro;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web.Mvc;
    
    namespace Easymatica.Somministrazione.Web.UI.Controllers
    {
        public class PianoLavoroController : Controller
        {
            public ActionResult Index()
            {
                return View();
            }
    
            public ActionResult Nuovo(NuovoPianoLavoroModel model)
            {
                if (model == null)
                {
                    model = new NuovoPianoLavoroModel();
                }
    
                List<PianoLavoroTipo> list = new List<PianoLavoroTipo>
                {
                    new PianoLavoroTipo
                    {
                        Id = 1,
                        Tipologia = "Tipologia 1"
                    },
                    new PianoLavoroTipo
                    {
                        Id = 2,
                        Tipologia = "Tipologia 2"
                    }
                };
    
                model.TipologiaPianoLavoro = list.Select(x =>
                    new SelectListItem()
                    {
                        Value = x.Id.ToString(),
                        Text = x.Tipologia
                    }
                );
    
                return View(model);
            }
    
            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult NuovoPianoLavoro(NuovoPianoLavoroModel viewModel, string returnUrl = "")
            {
                if (!ModelState.IsValid)
                {
                    return View(viewModel);
                }
    
                if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
                    return Redirect(returnUrl);
    
                return RedirectToAction("Index", "PianoLavoro");
            }
        }
    }
    rispetto ad altri esempi, ho aggiunto anche l'action per recuperare i dati in post.

    questa la view:
    codice:
    @model NuovoPianoLavoroModel
    
    @{
        ViewBag.Title = "Nuovo Piano lavoro";
    }
    
    @section styles {
        @Styles.Render("~/css/validation")
    }
    
    <div class="container div_page_cont div_page_cont_nuovo">
        <div class="card">
            <div class="card-header">
                <span class="pt-2">
                    <b>PIANO LAVORO</b>
                </span>
            </div>
            <div class="card-body">
                @Html.ValidationSummary()
    
                @using (Html.BeginForm("NuovoPianoLavoro", "PianoLavoro", FormMethod.Post, new { id = "nuovo_mug_form" }))
                {
                    @Html.AntiForgeryToken()
    
                    <div class="row">
                        <div class="col-md-6">
                            <div class="form-group">
                                @Html.LabelFor(m => m.Descrizione)
                                @Html.TextBoxFor(m => m.Descrizione, new { @class = "form-control", @placeholder = "Es. Spostato su", autofocus = "autofocus" })
                                @Html.ValidationMessageFor(m => m.Descrizione)
                            </div>
                        </div>
    
                        <div class="col-md-6">
                            <div class="form-group">
                                @Html.LabelFor(m => m.Tipologia)
                                @Html.DropDownListFor(m => m.Tipologia, Model.TipologiaPianoLavoro, "Seleziona una tipologia", new { @class = "form-control" })
                                @Html.ValidationMessageFor(m => m.Tipologia)
                            </div>
                        </div>
                    </div>
    
                    <div class="row">
                        <div class="col-md-6">
                            <div class="form-group">
                                @Html.LabelFor(m => m.Presidio)
                                @Html.TextBoxFor(m => m.Presidio, new { @class = "form-control", @placeholder = "Es. 12345698781" })
                                @Html.ValidationMessageFor(m => m.Presidio)
                            </div>
                        </div>
    
                        <div class="col-md-6"></div>
                    </div>
    
                    <div class="row">
                        <div class="col-md-6">
                            <div class="form-group">
                                @Html.LabelFor(m => m.DataInizio)
                                <div class="input-group date" id="DataInizio" data-target-input="nearest">
                                    @Html.TextBoxFor(m => m.DataInizio, new { @class = "form-control datetimepicker-input input_date", data_target = "#DataInizio" })
                                    <div class="input-group-append" data-target="#DataInizio" data-toggle="datetimepicker">
                                        <div class="input-group-text"><i class="fa fa-calendar"></i></div>
                                    </div>
                                </div>
                            </div>
                        </div>
    
                        <div class="col-md-6">
                            <div class="form-group">
                                @Html.LabelFor(m => m.DataFine)
                                <div class="input-group date" id="DataFine" data-target-input="nearest">
                                    @Html.TextBoxFor(m => m.DataFine, new { @class = "form-control datetimepicker-input input_date", data_target = "#DataFine" })
                                    <div class="input-group-append" data-target="#DataFine" data-toggle="datetimepicker">
                                        <div class="input-group-text"><i class="fa fa-calendar"></i></div>
                                    </div>
                                </div>
                            </div>
                        </div>
    
                        <div class="col-md-6">
                            <div class="form-group">
                                @Html.LabelFor(m => m.OraInizio)
                                <div class="input-group date" id="OraInizio" data-target-input="nearest">
                                    @Html.TextBoxFor(m => m.OraInizio, new { @class = "form-control datetimepicker-input input_date", data_target = "#OraInizio" })
                                    <div class="input-group-append" data-target="#OraInizio" data-toggle="datetimepicker">
                                        <div class="input-group-text"><i class="fa fa-calendar"></i></div>
                                    </div>
                                </div>
                            </div>
                        </div>
    
                        <div class="col-md-6">
                            <div class="form-group">
                                @Html.LabelFor(m => m.OraFine)
                                <div class="input-group date" id="OraInizio" data-target-input="nearest">
                                    @Html.TextBoxFor(m => m.OraFine, new { @class = "form-control datetimepicker-input input_date", data_target = "#OraFine" })
                                    <div class="input-group-append" data-target="#OraFine" data-toggle="datetimepicker">
                                        <div class="input-group-text"><i class="fa fa-calendar"></i></div>
                                    </div>
                                </div>
                            </div>
                        </div>
    
                    </div>
                }
            </div>
        </div>
    </div>
    
    <script type="text/javascript">
        $(function () {
            $('#DataInizio').datetimepicker({
                format: 'L',
                locale: 'it'
            });
    
            $('#DataFine').datetimepicker({
                format: 'L',
                locale: 'it'
            });
    
            $('#OraInizio').datetimepicker({
                format: 'LT',
                locale: 'it'
            });
    
            $('#OraFine').datetimepicker({
                format: 'LT',
                locale: 'it'
            });
        });
    </script>
    
    @section scripts {
        @Scripts.Render("~/js/validation")
    }
    secondo me il problema potrebbe essere qualcosa legato al controller e al form!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.