62 messaggi dal 22 ottobre 2012
Salve, ho un problema con l'utilizzo del Html Helper Ajax.beginForm.
Quando viene caricata la pagina a seguito dell'action Index visualizzo il filtro per la ricerca, eseguò il submit e ottengo la webgrid.
Dalla griglia Webgrid eseguo le funzioni di paging ed order senza problemi, ad ogni azione viene eseguita l'action SearchResults.

Se eseguo nuovamente il submit del filtro di testata, mi viene ricaricata la webgrid ma ora se eseguo funzioni di paging oppure di order vendo che l'action Searchresult viene eseguita due volte e cosi via se eseguo un'altro submit dal filtro di testata la cosa si triplicla.

Come posso fare per evitare questo comportamento.

Index.cshtml
@model Portal.Web.ViewModels.DocTeFilterViewModel

@using (Ajax.BeginForm("SearchResults", "DocTe",
    new AjaxOptions
    {   
        InsertionMode = InsertionMode.Replace,
        HttpMethod = "GET",
        UpdateTargetId = "search-results",
        LoadingElementId="loading",
        LoadingElementDuration=100
    }))
{
    var ModelFilter = Model;

   @Html.TextBoxFor(m => ModelFilter.descr)
   <button id="btnfilter" type="submit"></button>
        
    <br />
    <div id="search-results">

    </div>
    <div id="loading" style="display:none">
        Sto Caricando i Dati
    </div>
}


SearchResultsPartial.cshtml

model PagedList<Portal.Web.ViewModels.DocTeViewModel>

@using Portal.Model;

@{
    var grid = new WebGrid(
                canPage: true,
                rowsPerPage: Model.PageSize,
                canSort: true,
                ajaxUpdateContainerId: "grid");

    grid.Bind(Model.Content, rowCount: Model.TotalRecords, autoSortAndPage: false);

    @grid.GetHtml(htmlAttributes: new { id = "grid" },   // id for ajaxUpdateContainerId parameter
            fillEmptyRows: false,
            tableStyle: "table table-bordered table-hover",
            mode: WebGridPagerModes.All,
             columns: grid.Columns(
             grid.Column("tipdoc", "tipdoc"),
             grid.Column("descr", descr")                                    ));

}



Controller
[HttpGet]
 public ActionResult Index(DocTeFilterViewModel ModelFilter)
    {   
       return View(ModelFilter);           
    }


[HttpGet]
 public ActionResult SearchResults(DocTeFilterViewModel ModelFilter,
             int page = 1, int pageSize = 5, string sort = "IDDocTe", string sortdir = "DESC")
        {         
                try
                {    
                   ... eseguo i filtri, le selezioni ... restituisco la PartialView                 

                    
                    
                    return PartialView("SearchResultsPartial", records);
                }
               catch (Exception e)
                {                                     
                   ModelState.AddModelError("",String.Format("Unable to search. Try again, and if the problem persists see your system administrator.", e.Message));
               }
        
             return PartialView("Error");
        }

11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,

rubinim ha scritto:

l'action Searchresult viene eseguita due volte e cosi via se eseguo un'altro submit dal filtro di testata la cosa si triplicla.

Potrebbe esserci del javascript che continua ad aggiungere gestori dell'evento click ad ogni submit. La responsabile potrebbe essere SearchResultsPartial.cshtml, dato che è la sola a produrre dell'output ogni volta che invii il form.
O meglio, il problema potrebbe essere nella sua view di layout, dato che nel codice che hai postato non si vede quel javascript a cui faccio riferimento.

Puoi confermare che SearchResultsPartial.cshtml sta restituendo il suo output unitamente a quello della sua pagina di layout?
Dovresti verificarlo aprendo il pannello "Rete" o "Network" del pannello degli strumenti di sviluppo del browser (tasto F12) e verificando cosa sta restituendo il server ogni volta che fai la submit.

Se effettivamente vedi che c'è del javascript, prova ad escludere la pagina di layout mettendo questo in cima a SearchResultsPartial.cshtml.
@{
Layout = null;
}


Se non era lì, deve trovarsi da qualche altra parte. Se lo trovi, posta quel javascript e vediamo come modificarlo.

ciao,
Moreno

Enjoy learning and just keep making
62 messaggi dal 22 ottobre 2012
Ciao, ho trovato questo link

http://stackoverflow.com/questions/22272273/mvc4-webgrid-loaded-from-ajax-form-multiple-calls-to-controller-when-sorting-a

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.