2012-04-11 14 views
0

Ich brauche Hilfe mit diesem ..Refresh viewData Objekt in renderPartial

Ich habe eine ViewData mit einer Liste von Clients und ich füttere es, wenn die Index Aktionsmethode aufgerufen wird.

/* Index-Aktion ist die Methode, die die Ansicht öffnet. */

Sobald die Index-Methode aufgerufen wurde, wird die Variable fee und Sicht wird angezeigt.

Dann habe ich einen Dialog, in dem eine Teilansicht gerendert wird, die eine Tabelle mit der Liste der Clients hat.

<div id="popupClients" class="popUp" style= "display:none"> 
    <% Html.RenderPartial("ClientsPartialView", ViewData["clients"]); %> 

/* popupClients wird der Dialog. */

/* ClientsPartialView ist eine partialView mit einer Tabelle, die die ID und den Namen der Clients anzeigt. */

Die Frage ist, wie kann ich die Daten der ViewData aktualisieren, bevor sie angezeigt werden?

Ich frage dies, weil, wenn jemand einen neuen Kunden einzufügen, in dem PartialView angezeigt werden muss

Thnxs!

Antwort

0

Sie können Ajax verwenden, um den Teil Ihrer Seite zu aktualisieren, der die popupClients kurz vor dem Anzeigen dieses Dialogfelds darstellt.

Wenn Ihr Teilansicht macht, sagen wir, ein div alle Inhalte für den Popup enthält, können Sie Ajax verwenden, die div zu aktualisieren, etwas entlang der Linien von:

function getCustomerList(searchCriteria) { 
    $.ajax({ 
     url: 'Home/GetClientList', 
     type: 'POST', 
     async: false, 
     data: { searchString: searchCriteria }, 
     success: function (result) { 
      $("#popupClients").html(result); 
      $(/*... do whatever you do now to show your dialog....*/ ; 
     } 
    }); 
}; 

UPDATE

Basierend auf Ihren Kommentar ...

Jedes Mal, wenn Ihr serverseitigen Code ausgeführt wird (und Sie zeigte nur m Der serverseitige Code in Ihrem Kommentar), Sie sind in der Lage, neue Daten zu erhalten. Wenn Ihre Teilansicht zu Ihrem Controller zurückruft, sollte Ihr Controller das Modell aus der Datenbank aktualisieren, wenn dies die Geschäftsanforderung ist.

Etwas entlang der Linien von:

[OutputCache(Duration = 0)] 
public ActionResult _ClientList() 
{ 
    List<Clients> clientList = GetCurrentClientListsFromDB(); 

    return PartialView(clientList); 
} 

dass eine Überprüfung in die Datenbank jedes Mal, wenn der Controller aufgerufen verursachen wird. Wenn es akzeptabel ist, ein aktuelles Update zu verpassen, können Sie den Wert OutputCache ändern, um die MVC-Engine zu informieren, dass das Ergebnis für eine bestimmte Anzahl von Sekunden zwischengespeichert wird. Sie können den OutputCache auch so konfigurieren, dass er auf Basis von SQL Dependency aktualisiert wird, sodass er automatisch ungültig wird, wenn eine Änderung an einer zugrunde liegenden Tabelle vorgenommen wird und nicht nur basierend auf der verstrichenen Zeit aktualisiert wird. Das Setup ist komplexer, liefert aber ein genaueres Ergebnis.

+0

vielleicht kann ich nicht richtig ausdrücken.

<% foreach (var item in Model) { %> <% } %>
ID NOMBRE
<%: item.ID %> <%: item.NOMBRE %>
Ich muss den Tab1 aktualisieren, mit einer Liste von Clients – Fausto

+0

Ich aktualisierte meine Antwort basierend auf diesem Kommentar. –

+0

Thnxs Sie !!!!! – Fausto