51 messaggi dal 15 maggio 2012
Salve ragazzi,
sto avendo difficolta nella gestione dei bottoni e degli oggetti che aggiungo alle view col pattern mvc3.
Partendo dal presupposto che con il view engine Razor ho perso ogni contatto "visuale" con i metodi degli oggetti che posiziono, e quindi mi trovo piuttosto "spiazzato",vado ad illustrare la mia situazione:

Ho una view Index.cshtml cosi' implementata

@{
    ViewBag.Title = "Home Page";
}

<script type="text/javascript">
    $(document).ready(function () {
        $("#Button1").click(function (e) {
            alert("submit");
        });
    });
</script>

<input id="nome" type="text" />
<input id="cognome" type="text" />
<input id="Button1" type="button" value="Bottone" onclick="Button1_click"/>

in questa situazione riesco ad ottenere una specie di messagebox alla pressione del bottone.

ora se suppongo di avere un controller "Homecontroller" con un metodo all'interno:

        public string getNomeCognome(string mionome,string miocognome)
        {
            return mionome + miocognome;
        }


come faccio per fare in modo che alla pressione del bottone venga richiamato questo metodo mandandogli come parametro le stringe prese dalle due inputbox?
Così a naso, stai usando MVC come se fosse Web Forms, e non è correttissmo

In ogni modo, dovresti invocare il tuo controller tramite AJAX, ad esempio con jQuery.ajax(), recuperare il tuo risultato e utilizzarlo, client-side, sempre tramite javascript.

Ciao!
Marco
51 messaggi dal 15 maggio 2012
" stai usando MVC come se fosse Web Forms, e non e' correttissmo "

Domanda: e quindi come sarebbe la maniera "corretta",se c'e'?

E se non c'è una maniera corretta...dovrei rassegnarmi al fatto che non posso utilizzare bottoni e textbox in MVC?

Mi confonde questa tua affermazione,perche se MVC si fonda sullo scambio di dati tra View Controller e Model che senso avrebbe non permettere alla view di mandare dati a un controller e viceversa?
E chi ha detto che non puoi farlo? Ti ho anche spiegato come

Il punto è che se mi parli di "aver perso ogni contatto visuale con i metodi degli oggetti che posizioni", intuisco che forse stai cercando se c'è un evento da gestire server side o qualcosa di simile.

MVC non funziona in questo modo, MVC non ti dà l'astrazione dei controlli server side come WebForms, ma è più aderente alle logiche del protocollo HTTP. Pertanto, se vuoi inviare dei dati al server, o fai il post di una form, o usi ajax per una chiamata tramite XHR.

Ciao!
61 messaggi dal 20 maggio 2009
ciao,
quello chi ti server e èuna funzione javascript che chiama il metodo del controller, i dati li leggi dalle input con jquery.


dichiara nella pagina html la funzione javascript GetjsNomeCognome
che non fa altro che chiamare il metodo del controller.
la parte importante è @Url.Action("GetNomeCognome", "Home")
il primo parametro è il nome del metodo dichiarato nel controller
il secondo + il nome del controller senza la parola "Controller"
quindi Homecontroller -> Home


  function GetjsNomeCognome(VarNome,VarCognome){
     $.ajax({
                type: "POST",
                url: '@Url.Action("GetNomeCognome", "Home")',
                data: { nome: VarNome, cognome: VarCognome },
                success: function (msg) {
                    alert(msg);                    
                }
            });
  }



quindi al page ready leggi i parametri con jquery e li passi alla
funzione js, la quale chiamerà il metodo server e ti ritornerà il risultato.
$(document).ready(function () {
        $("#Button1").click(function (e) {
            var nome = $("#nome").val();
            var cognome = $("#cognome").val();
            GetjsNomeCognome(nome,cognome);
        });
    });


importante: il metodo lato server deve avere 2 parametri string che si
devono chiamare esattamente come le variabili nella properità data
del metodo js.
quindi :data: { nome: VarNome, cognome: VarCognome }
i parametri sul metodo server devono chiamarsi nome e cognome.

NB: se hai necessità di ritornare oggetti complessi invece che
semplici stringhe devi usare il formato json.
in .net c'è una classe che converte un oggetto .net in un oggetto
json.

se hai bisogno di altre info scrivimi pure anche dei pm, sono fresco di un progettone MVC 3 razor.

Vivaldi Francesco
10 messaggi dal 28 aprile 2006
Contributi
la risposta forse è molto più semplice, non c'è bisogno di nessun evento lato server, ma neanche lato client, probabilmente ti basta semplicemente fare il submit di un form:

<form action="@Url.Action("MiaAzione")">
<input name="nome" type="text" />
<input name="cognome" type="text" />
<input type="submit" value="Bottone"/>
</form>


Nel controller avrai:

[HttPost]
public ActionResult MiaAzione(string nome, string cognome) {
    // fai qualcosa con i dati e magari ed eventualmente cambi vista
    // questo lo decidi tu
}
51 messaggi dal 15 maggio 2012
E' la prima volta che ricevo tutte queste risposte e devo decidere quale sia il suggerimento migliore da utilizzare e la cosa piu assurda e' che nel frattempo io ne avevo trovato un'altro ancora(anche se non so se sia la maniera migliore e mi sembra tra l'altro molto simile all'ultima risposta)...allora posto la mia risoluzione in modo che magari possiamo discuterne e potrei capire anche dove sbaglio...io ho fatto cosi:

@using (Html.BeginForm("action", "controller"))
{ 
    <input type="text" id="nome" value=" " name="nome" />
    <input type="text" id="cognome" value=" " name="cognome" />
    <input type="submit" value="Imposta" />

   
}


public ActionResult MiaAzione(string nome, string cognome) {
    // fai qualcosa 
}


ditemi voi che ne pensate...

In ogni caso la soluzioni in jscript anche se complicata sembra interessante....solo che ci sarebbe da capire quando preferire javascript a controlli in html misto a codice c# come quello che ho usato io.
Modificato da VincenzoG il 28 giugno 2012 10.38 -
61 messaggi dal 20 maggio 2009
Ciao,

Se lavori in MVC non puoi evitare il javascript e soprattutto JQuery.
Ad ottobre ho iniziato a lavorare in MVC e con javascript non andavo molto d'accordo e tutti gli approcci che utilizzavo per evitarlo finivano sempre per complicarmi la vita. Ad oggi ho acquisito una buona skill con javascrip\JQuery non sono cose complesse è solo una scoglio iniziale da superare che poi ti garantisce un notevole vantaggio.

Con MVC hai il controllo dell'html generato, quindi puoi usare JQuery facilmente e con risultati eccellenti.
Il javascript che vai ad utilizzare è per la maggior parte funzioni che postano i dati al server, recuperano il risultato e lo inseriscono nella pagina html. Niente di più complesso.



L'utilizzo del Form va benissimo ma non ottieni risultati.

se ad esempio devi far compilare una form anagrafica, il form è perfetto posti i dati al controller il quale li salva.

ma se devi fare una query che recupera l'elenco utenti e poi visualizzare l'elenco utenti nella pagina, devi usare il suggerimento che ti ho dato, in quanto la funzione ajax ti ritorna una stringa json, cioè una lista di oggetti utente, che te puoi iniettare nell'html facilmente.

se ad esempio devi controllare un dato inserito in una textbox confrontandolo con un valore del db, devi usare una chiamata ajax all'onblur della casella di testo postando il dato al controller che esegue il controllo sul db e ti ritorna l'esito e poi con jquery iniserire un eventuale messaggio di errore nell'html.



Spero di esserti stato utile.

Vivaldi Francesco

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.