88 messaggi dal 18 aprile 2018
Buonasera Moreno,
ho provato ad inserire i dati manualmente nel controller per vedere se il problem fosse nella views in relatà cambia l'errore. questo è il codice del controller:

  public ActionResult Create()
        {
            ViewBag.UserId = new SelectList(db.Users, "Id", "Nome");
            return View();
        }

        // POST: Note/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see https://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "idNota,nota,dataIns,UserId")] Nota nota)
        {
            
            nota.nota = "nota di test";
            nota.dataIns = DateTime.Now;
            nota.UserId = "157de909-00d7-46ac-98ae-073e85a0a323";
            if (ModelState.IsValid)
            {
                db.Note.Add(nota);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.UserId = new SelectList(db.Users, "Id", "Nome", nota.UserId);
            return View(nota);
        }



questi l'errore: Riferimento a un oggetto non impostato su un'istanza di oggetto. Errore nella riga 55

Riga 53:             
Riga 54:                 
Riga 55:                 nota.nota = "nota di test"; 
Riga 56:                 nota.dataIns = DateTime.Now;
Riga 57:                 nota.UserId = "157de909-00d7-46ac-98ae-073e85a0a323";


Proprio non capisco.. nella views rimettendo le cose come erano e mettando dati che utilizzo in appuntamenti senza riscontrare problemi (come la data) mi da quell'errore.. per essere ancora più preciso ti posto quello che scrivo nella views:
Nota: nota di prova
data: 10/10/2010 00:00:00
utente: (quello presente nella dropdownList)

Chiarmanete se inserisco i dati manualmente nel database li visualizza nella index del controller ma se faccio edita aggiungendo una lettera alla nota ho gli stessi errori.

Se commento la riga 60 del primo errore, ho errore nella views e non risolvo nulla, comunque la riga di errore commentando quella riga è questo:(scusa per il gioco di parole)
Nessun elemento ViewData di tipo 'IEnumerable<SelectListItem>' con chiave 'UserId'. errore nella riga 37

Riga 35:             @Html.LabelFor(model => model.UserId, "UserId", htmlAttributes: new { @class = "control-label col-md-2" })
Riga 36:             <div class="col-md-10">
Riga 37:                 @Html.DropDownList("UserId", null, htmlAttributes: new { @class = "form-control" })
Riga 38:                 @Html.ValidationMessageFor(model => model.UserId, "", new { @class = "text-danger" })
Riga 39:             </div>


Ho usato gli strumenti di sviluppo del browser, sono andato in Rete e i dati che manda sono giusti ovvero:

datains:10/10/2010+00:00:00 (ho provato per curiosità a rimuovere l'ora ma non cambia nulla)
nota: questa è una nota di test
Userid: 5536dac2-cb04-42b5-905e-0aa1c4dc99e9





Proprio non riesco a capire come fa a non funzionare ne il create ne l'edita, scusami se non sono stato precisissimo nel darti le info.
Come sempre ti ringrazio
Un saluto
Mirko
Modificato da Mirko2018 il 30 maggio 2018 00.47 -
88 messaggi dal 18 aprile 2018
Possibile che il problema sia nell'identity model?


Grazie Mille
Modificato da Mirko2018 il 30 maggio 2018 01.05 -
Modificato da Mirko2018 il 30 maggio 2018 01.07 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Possibile che il problema sia nell'identity model?

No, come ti dicevo, il problema è nel model binder. Hai presente questa riga?
public ActionResult Create([Bind(Include = "idNota,nota,dataIns,UserId")] Nota nota)

L'oggetto di tipo Nota ti viene istanziato dal model binder e passato come argomento del metodo Create. In questo caso non ci sta riuscendo e quindi ti sta passando null.
Se metti i valori staticamente come in questo caso, non risolvi nulla perché nota è null. Non puoi impostare le proprietà di un oggetto null.
//Qui hai una NullReferenceException!!
nota.nota = "nota di test";
nota.dataIns = DateTime.Now;
nota.UserId = "157de909-00d7-46ac-98ae-073e85a0a323";


Casomai, se volessi provare con valori statici potresti fare così ma questa non è ovviamente la soluzione definitiva. Ti serve solo a verificare che il salvataggio di una nota avviene correttamente.
nota = nota ?? new Nota();
nota.nota = "nota di test";
nota.dataIns = DateTime.Now;
nota.UserId = "157de909-00d7-46ac-98ae-073e85a0a323";


Quindi, ripropongo la mia ipotesi: stai passando dal form un valore non valido. Questo valore sembra essere la data.
datains:10/10/2010+00:00:00

C'è un + lì in mezzo che rende la data non valida. Ecco un fiddle che dimostra che DateTime.Parse non funziona con quella data.
https://dotnetfiddle.net/WhxJhR

Questo potrebbe essere il motivo per cui il model binder sta avendo difficoltà a crearti l'oggetto Nota.
Fai in modo che la data sia valida, ad esempio 10/10/2010 00:00:00 e vedi se a quel punto funziona.
Probabilmente dovrai intervenire sul controllo calendario che stai usando lato client per scegliere la data. Fai in modo che scriva la data nel campo nel formato internazionale yyyy-mm-dd, in modo che non ci sia possibilità di fraintendimento (altrimenti una data come 7/5/2018 potrebbe esserti interpretata dal model binder come 5 luglio 2018).

ciao,
Moreno
Modificato da BrightSoul il 30 maggio 2018 13.49 -

Enjoy learning and just keep making
88 messaggi dal 18 aprile 2018
Buonasera Moreno,
grazie per la pazienza... ho controllato il controller appuntamenti(che ti ho postato precedentemente) che anche quello ha una data e non mi da problemi, ho controllato cosa passa e passa esattamente lo stesso dato ovvero: 10/10/2010+00:00:00

le impostazioni sono identiche.. come posso fare per darti info più interessanti per risolvere?

Grazie Mirko
11.886 messaggi dal 09 febbraio 2002
Contributi
Ok, sono riuscito a riprodurre il problema.
Si sta verificando perché nella classe Nota hai una proprietà chiamata nota che ha lo stesso nome del parametro nota. Evidentemente il model binder va in confusione. Cambia il nome del parametro in "nota1" o altro.
public ActionResult Create([Bind(Include = "idNota,nota,dataIns,UserId")] Nota nota1)


ciao,
Moreno

Enjoy learning and just keep making
88 messaggi dal 18 aprile 2018
Buonasera Moreno, ti avevo scritto anche un messaggio privato per disperazione, poi continuando a provare per caso mi sono accorto che il problema era questo.
Grazie mille per la tua disponibilità.
Mirko
11.886 messaggi dal 09 febbraio 2002
Contributi
Ah figurati, ho letto i messaggi solo ora.
Bene, l'importante è aver risolto.

ciao,
Moreno

Enjoy learning and just keep making