251 messaggi dal 03 dicembre 2001
www.fuossbook.it
Ciao a tutti,
ho un form in cui inserisco dei dati che registro in un database.
I dati vengono inviati ad un modello che si chiama questionario, all'interno del quale c'é un elemento sezione che contiene le domande.
Nel questionario le domande si ripetono, perché faccio le stesse domande per ogni elemento che viene aggiunto (l'elemento é un utente), quindi le domande sono le stesse ma hanno delle occorenze
In pratica dico che in questo questionario sulla mia famiglia ho quattro persone quindi le domande ne cognome sono le stesse ma ripetute quattro volte
Ho un ciclo sugli utenti in base alle occorrenze, quindi 4 utenti 4 occorrenze.
Vi faccio uno schema
Model
Questionario
Sessione
Domanda1 occorenza1
Domanda2 occorenza1
Domanda3 occorenza1

Domanda1 occorenza2
Domanda2 occorenza2
Domanda3 occorenza2

Domanda1 occorenza3
Domanda2 occorenza3
Domanda3 occorenza3

Domanda1 occorenza4
Domanda2 occorenza4
Domanda3 occorenza4

spero di essere stato chiaro

quando clicco su invio richiamo una funzione che registra le mie domane(risposte) e mi restituisce il modello alla view

Fin che salvo e ritorno sulla view tutto ok
Il mio problema é se voglio cancellare degli utenti, quindi delle domande.
Affinché la registrazione funzioni ho aggiunto un input hidden Cancella alle domande, in modo che il modello viene inviato completo ma poi é C# che non mi registra le domande con l'input cancella nel modello .
Ho dovuto fare questo perchè se elimino completamente dal form le domande che hanno un id, quando faccio l'update se per esempio cancello l'occorrenza 3 si interrompevano gli id e perdo anche l'occorrenza 4
La registrazione anche va tutto ok, in caso elimino un occorrenza , il mio problema é quando torno sulla view.
Perché ritorno il modello dove ho un occorrenza che in effetti non esiste più perchè cancellata.
Quindi nella mia funzione avrei bisogno di sottrarre dal modello le domande con Cancella a true e riassegnare anche le occorrenze.
Se per esempio elimino occorrenza 2 e 3
Vorrei trovarmi che domande 2 e 3 spariscono dal modello e che l'occorrenza 4 diventi 2

Sto tentanto di fare dei for e lavorare sul modello con il remove ma non ci riesco, avete suggerimenti?

Spero di essere stato chiaro, ma non era semplice da spiegare

Grazie

***************************
webmaster di:
hydrasail.blogspot.it
fuossbook.it
***************************
11.872 messaggi dal 09 febbraio 2002
Contributi
Ciao,

Sto tentanto di fare dei for e lavorare sul modello con il remove ma non ci riesco, avete suggerimenti?

Ok, potrebbe funzionare, posta un po' di codice e l'errore che ottieni.


e che l'occorrenza 4 diventi 2

Ok, spiega come funziona questo. Hai un campo intero in cui scrivi il numero? Quindi in questo caso devi aggiornare il valore da 4 a 2?

ciao,
Moreno
Modificato da BrightSoul il 23 agosto 2018 13.19 -

Enjoy learning and just keep making
251 messaggi dal 03 dicembre 2001
www.fuossbook.it
BrightSoul ha scritto:
Ciao,

Sto tentanto di fare dei for e lavorare sul modello con il remove ma non ci riesco, avete suggerimenti?

Ok, potrebbe funzionare, posta un po' di codice e l'errore che ottieni.



parto dal remove

Per ora per modificare il modello che torno sto provando a fare questo




 Questionnaire NewModel = new Questionnaire();
            NewModel = model;

 foreach (var sec in NewModel.Sections)
            {
                var o = 0;

                foreach (var quest in sec.Questions)
                { 

                  if (quest.ASupprimer == true)
                        {
                          sec.Questions.Remove(quest);
                     }
                   

                }


            }


l'errore che ricevo é

La collezione è stata modificata; l'operazione di enumerazione potrebbe non essere eseguita.
foreach (var quest in sec.Questions)



ho provato quest'altro sistema per cancellare le domande



foreach (var sec in NewModel.Sections)
            {


                var supr = sec.Questions.ToList();
                var ccc= supr.RemoveAll(ASupprimer);

            }



   private static bool ASupprimer(Models.Questionnaire.Question q)
        {
            
            return q.ASupprimer;
        }




non ricevo errore ma NewModel contiene alla fine sempre le stesse domande,
metto un breackpoint su ccc, e ccc mi ritorna il numero di domande restanti ma non cambia il modello
Modificato da cyberkings il 23 agosto 2018 15.22 -
Modificato da cyberkings il 23 agosto 2018 15.38 -

***************************
webmaster di:
hydrasail.blogspot.it
fuossbook.it
***************************
251 messaggi dal 03 dicembre 2001
www.fuossbook.it
gli elementi dal modello sono riuscito a toglierli con il codice sotto stante, bastava poco (a saperlo fare)

 foreach (var sec in NewModel.Sections)
            {
                sec.Questions.RemoveAll(objectB => objectB.ASupprimer);
            }


adesso resta il problema che il mio modello é modificato ma torna questo

Domanda1 occorenza1
Domanda2 occorenza1
Domanda3 occorenza1

Domanda1 occorenza2
Domanda2 occorenza2
Domanda3 occorenza2

Domanda1 occorenza4
Domanda2 occorenza4
Domanda3 occorenza4

nella view ho questo


 for (var o = 0; o < nOccurance; o++)
                                                    {
                                                        if ((o == 0 && Model.Sections[i].Questions.Where(q => q.Occurance == 0).Any(q => !string.IsNullOrEmpty(q.Reponse))) || o != 0)


nOccurance è il numero massimo di occorrenze che trovo
essendo tutto ancora a 4 succede che il ciclo arriva a 3 e va in errore

ho pensato ok faccio un controllo se esiste o no un occorrenza 3 facendo u n if globbale
ma se fosse possibile vorrei ritornare un modello con le occorrenze cambiate perchè presumo che poi andando ad aggiungere un nuovo elemento o salvando di nuovo mi ritrovo i dati non salvati o qualche errore

quindi vorrei tornare questo
Domanda2 occorenza1
Domanda3 occorenza1

Domanda1 occorenza2
Domanda2 occorenza2
Domanda3 occorenza2

Domanda1 occorenza3 (ex occorenza4)
Domanda2 occorenza3 (ex occorenza4)
Domanda3 occorenza3 (ex occorenza4)

suggerimenti?

***************************
webmaster di:
hydrasail.blogspot.it
fuossbook.it
***************************
11.872 messaggi dal 09 febbraio 2002
Contributi
Un foreach così funzionerebbe?

int occurrence = 0;
foreach (var question in Model.Sections[i].Questions) {
 question.Occurrence = occurrence;
 occurrence++;
}
//Qui salvi


In pratica enumeri le Questions (che dopo l'eliminazione saranno solo 3) e ciascuna ri-assegni la nuova occurrence. Alla fine salvi.

ciao,
Moreno

Enjoy learning and just keep making
251 messaggi dal 03 dicembre 2001
www.fuossbook.it
BrightSoul ha scritto:
Un foreach così funzionerebbe?

int occurrence = 0;
foreach (var question in Model.Sections[i].Questions) {
 question.Occurrence = occurrence;
 occurrence++;
}
//Qui salvi


In pratica enumeri le Questions (che dopo l'eliminazione saranno solo 3) e ciascuna ri-assegni la nuova occurrence. Alla fine salvi.

ciao,
Moreno


Ciao Moreno
grazie per il tuo aiuto,
ho testato il tuo script ma non va bene, forse non mi sono spiegato bene.
Con questo script ottengo un occorrenza diversa per ogni domanda,
invece io ho blocchi di domande per esempio ho detto che le domande erano tre
quindi potrei trovarmi 5 occorrenze per un totale di 15 domande ma di base dorrei trovarmi sempre quest'ordine

Domanda1 occorenza1
Domanda2 occorenza1
Domanda3 occorenza1

Domanda1 occorenza2
Domanda2 occorenza2
Domanda3 occorenza2

Domanda1 occorenza3
Domanda2 occorenza3
Domanda3 occorenza3

che non posso controllare tramite sezione
sto ora cercando di fare uno script verifichi le occorrenze che arrivano dal post e in caso che manca andare ad aggiungere quello che manca e cambiare poi le successive

***************************
webmaster di:
hydrasail.blogspot.it
fuossbook.it
***************************
11.872 messaggi dal 09 febbraio 2002
Contributi

quindi potrei trovarmi 5 occorrenze per un totale di 15 domande ma di base dorrei trovarmi sempre quest'ordine

Giusto, allora prova così:

int occurrence = 1;
foreach (var section in Model.Sections) {
  foreach (var question in section.Questions) {
   question.Occurrence = occurrence;
  }
  occurrence++;
}
//Qui salvi

Così tutte le domande di una section avranno lo stesso numero di occorrenza.

ciao,
Moreno

Enjoy learning and just keep making
251 messaggi dal 03 dicembre 2001
www.fuossbook.it
Ciao,
purtroppo non andava bene, speravo io di postare una soluzione ma dopo 3 giorni sto ancora cercando di capire come gestire le occorrenze quando si vanno cancellare delle occorrenze già esistenti e quindi rinominare

intanto ti dico la sezione che contiene le occorrenze utente é una, c'è un ciclo sulle sezioni perché é tutto dinamico, ma in realtà una sola sessione contiene i dati che vado ad aggiungere o a cancellare

quindi all'interno di questa sessione ho le domande


domanda 1
domanda 2
domanda 3

fino a che aggiungo o cancello l'ultima tutto ok!

il mio problema sta se cancello una che non sia l'ultima o se addirittura cancello proprio la prima
devo rinominare tutto
purtroppo le domande potrebbero anche variare un giorno quindi io attualmente ho 3 domande ma domani potrebbero essere 6 e quindi non posso gestire questo blocco di domande in un for per numero

ogni blocco io l'ho chiamata occorrenza

quindi se aggiungo un utente , aggiungo 3 domande e quindi un blocco/occorrenza

quindi mi potrei trovare che ho

domanda 1 occorrenza 1
domanda 2 occorrenza 1
domanda 3 occorrenza 1

domanda 1 occorrenza 2
domanda 2 occorrenza 2
domanda 3 occorrenza 2

domanda 1 occorrenza 3
domanda 2 occorrenza 3
domanda 3 occorrenza 3

domanda 1 occorrenza 4
domanda 2 occorrenza 4
domanda 3 occorrenza 4


salvo e tutto ok!

ma sei poi decido di cancellare l'occorrenza 3 , nel codice prima di salvare dovrei rinominare le occorrenze per avere

domanda 1 occorrenza 1
domanda 2 occorrenza 1
domanda 3 occorrenza 1

domanda 1 occorrenza 2
domanda 2 occorrenza 2
domanda 3 occorrenza 2

domanda 1 occorrenza 3
domanda 2 occorrenza 3
domanda 3 occorrenza 3

dove però
domanda 1 occorrenza 3
domanda 2 occorrenza 3
domanda 3 occorrenza 3

occorrenza 3 era la vecchia occorrenza 4



potrei anche cancellare occorrenza 2 e 3 e quindi
avere
domanda 1 occorrenza 1
domanda 2 occorrenza 1
domanda 3 occorrenza 1

domanda 1 occorrenza 2
domanda 2 occorrenza 2
domanda 3 occorrenza 2

dove occorrenza 2 era la 4




cosi come potre eliminare l'occorrenza 1 e avere
domanda 1 occorrenza 1
domanda 2 occorrenza 1
domanda 3 occorrenza 1

domanda 1 occorrenza 2
domanda 2 occorrenza 2
domanda 3 occorrenza 2

domanda 1 occorrenza 3
domanda 2 occorrenza 3
domanda 3 occorrenza 3

dove occorrenza 1 é la vecchia 2, occorrenza 2 é la vecchia 3, occorrenza 3 é la vecchia 4

il problema sta nel capire quando riparte il blocco di domande,cosa che posso fare andando solo a gestire l'occorrenza che mi arriva dal modello inviata dal post

un casino, ma onestamente pensavo fosse più facile, certo é che io avrò rifatto 5 volte le funzione di controllo e sempre qualcosa non va bene a secondo di quello che cancello :(
Modificato da cyberkings il 27 agosto 2018 18.00 -

***************************
webmaster di:
hydrasail.blogspot.it
fuossbook.it
***************************

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.