61 messaggi dal 20 maggio 2009
ciao sono alle prime armi con asp.net mvc 3 razor.
ho la seguente situazione:
una pagina index che deve mostrare un form con 4 campi e un pulsante
cerca.
una griglia con i risultati della ricerca.

ho impostato il tutto in questo modo:
una pagina index con l'intestazione.
una partialView con il form
una partialView con la griglia.

ho creato una viewModel per tutta la pagina in cui ho messo la lista
che dovrà valorizzare la griglia e i 4 valori che l'utente inserisce nelle textbox.

nella index ho caricato le 2 partial view

@Html.Partial("SearchClientePartialView", Model)
@Html.Partial("PerformSearch", Model.Anagrafiche)

il pulsante cerca sta nella prima View.

quando premo il pulsante "cerca" faccio il post dei dati ad una
ActionResult che chiama il model esegue la query e poi dovrebbe aggiornare la seconda View, ma non riesco, tutta la pagina mi viene sostituita con la seconda view, mostrando solo la griglia con i risultati.

Action nel Controller, a cui faccio il post dei dati.
[HttpPost]
public ActionResult PerformSearch(SearchClienteViewModel scwm)
{
            scwm.Anagrafiche = Model.GetAnagrafiche();
            return PartialView(scwm.Anagrafiche);
        }


Ho provato anche a spostare il pulsante cerca nella index, ma il risultato non cambia.

cosa sto sbagliando ?

Vivaldi Francesco
artanis wrote:
Ho provato anche a spostare il pulsante cerca nella index, ma il risultato non cambia.
cosa sto sbagliando ?

a pensare che AJAX sia magia: devi usare @Ajax.Form, non è automatico e da quello che dici non pare tu l'abbia fatto, quindi la form fa il post e viene renderizzata solo la partial view, perché è quello che tu hai scritto nell'action.
.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
61 messaggi dal 20 maggio 2009
ciao,

ho pravo in questo modo:

<div>
    <h1>Ricerca Cliente</h1>
    <hr />
    <br />
    i campi obbligatori contrassegnati da * sono obbligatori
    <br />     
     @using (Ajax.BeginForm("PerformSearch", "Cliente", new AjaxOptions 
     {
         UpdateTargetId = "result", 
         InsertionMode = InsertionMode.Replace
         }))
     {
        @Html.Partial("SearchClientePartialView", Model)
        <input type="submit" value="CERCA" />
     }
     <hr style="clear:both" />
    <br /> 
    <div id="result">
     @Html.Partial("PerformSearch", Model.Anagrafiche);
     </div>
</div>



Ma nel momento in cui clicco all'interno di una textbox mi blocca l'applicazione con un errore havascript "Errore di run-time di Microsoft JScript: 'Sys' non è definito"
evidenziando la riga

<form action="/Cliente/PerformSearch" id="form0" method="post" onclick="Sys.Mvc.AsyncForm.handleClick(this, new Sys.UI.DomEvent(event));" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: &#39;result&#39; });">

Vivaldi Francesco
61 messaggi dal 20 maggio 2009
Probabilmente è magico, perchè non serve usare @Ajax.Form.

Ho risolto, facendo fare il post dei dati sull'action Index invece che sull'action della partialview, e facendo ritornare all'action tutto il ViewModel.
In questo modo si aggiorna soltanto la partial view senza scrivere una riga di javascript.

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.