So binden Sie eine Gridview von einem statischen WebMethod

8

Ich habe einen Code hinter einer Methode aufgerufen, die jQuery mit der statischen Webmethode verwendet. Dieser Aufruf der Web-Methode war erfolgreich, aber wenn ich die Grid-Ansicht innerhalb dieser Methode bind, ergibt sich ein Fehler, der die Kontrolle in der statischen Methode nicht verwenden kann. Wie können wir das Problem lösen?

%Vor%

Und Fehler erhalten "Eine Objektreferenz ist für das nicht statische Feld, die Methode oder die Eigenschaft erforderlich"

    
Athul 18.06.2015, 09:28
quelle

6 Antworten

9

Sie können nicht tun, was Sie wollen.

Sie missverstehen den Unterschied zwischen Statik und Instanz. Zum Beispiel kann Ihre Seite von Hunderten von verschiedenen Personen verwendet werden. Jede Person erhält eine andere Instanz Ihrer Seite und jede Person wird eine andere Instanz von GridView sehen. Auf der anderen Seite, da Ihr WebMethod statisch ist, werden ALLE dieser hunderten von verschiedenen Personen EINE Methode bedient.

Wie kann dann Ihre statische Methode entscheiden, welche zu dienen? Es kann nicht.

Wenn Sie die Grid-Ansicht von ajax aus füllen möchten, müssen Sie Daten von Ihrem WebMethod zurücksenden, siehe ein Beispiel hier .

Lesen Sie folgenden Artikel, um mehr zu erfahren Warum WebMethod sind statische .

    
Atilla Ozgur 21.07.2015, 08:08
quelle
3

Wenn Sie die statische Methode verwenden, können Sie kein Steuerelement der Seite verwenden, da sie zu einer Klasse einer Seite gehören, die keinen statischen Bereich hat. In der statischen Methode dürfen Sie nur statische Daten, Steuerung usw. verwenden. Die mögliche Lösung besteht darin, dass Sie eine neue Instanz Ihrer Elternklasse erstellen müssen, d. H. Die Seitenklasse in der statischen Methode, und anschließend können Sie auf das gesamte Steuerelement der Seite dieser Instanz zugreifen. wie das ..

%Vor%

aber der angegebene Weg funktioniert nicht, wenn Daten zurückgehalten werden sollen, da die Instanz neu ist, so dass alte Daten gelöscht werden.

    
hdkhardik 18.06.2015 09:39
quelle
2

Sie können die reference der Gridview an die static method übergeben und die girdview binden.

Wenn Sie eine new Instanz von class erstellen und die statische Methode aufrufen, wird create new form und all controls created für diese specific instance , also gridview für original form niemals bevölkert sein.

Hier ist ein Beispiel, wie Sie Referenz und bindgridview übergeben können.

%Vor%     
Mairaj 21.07.2015 04:53
quelle
2

Das Problem ist nicht mit einem statischen Schlüsselwort, es ist mit web method keyword,
Wenn ASP.NET Control Post zurück, und es dauerte ganze Form auf Server daher Formular kann jede Kontrolle über Ihren Server erhalten.

Während die Web-Methode nur Daten hat, die Sie durch sie Parameter übergeben, es nicht einmal den Namen des Steuerelements in Ihrer ASP-Seite verfügbar

Sie haben 2 Möglichkeiten
entfernen webmethod und lassen es zurück posten oder erstellen sie ihr gridview von jquery nach tabelle, tr, td
Wie auch immer, ich weiß nicht, über Gridview in Parameter der Web-Methode übergeben Sie können auch überprüfen, aber ich denke, Sie können es nur lesen (wenn möglich), Bindung ist nicht möglich

    
VISHMAY 24.07.2015 04:35
quelle
1

Das Problem, das Sie haben, hängt damit zusammen, wie asp.net-Webforms die Daten an die Steuerelemente bindet.

Wenn Sie sich in einem normalen Postback befinden und die Datenquelle der Gridview mit einigen Daten füllen, werden diese Daten im Ansichtszustand gridview "aufgezeichnet" und dann im Browser in einem versteckten Feld mit dem Namen _VIEWSTATE gerendert und dies ist Ihr Problem .

Wenn Sie den Ajax-Aufruf ausführen und Ihre (statische) Webmethode aufrufen, sind Ihre Serversteuerungen nicht vorhanden, da Sie nicht den vollständigen Seitenzyklus haben.

Sie können Ihre Datenquelle in der Sitzung zur späteren Bearbeitung speichern.

In Bezug auf Ihren JQuery-Ajax-Aufruf müssen Sie diesen manuell behandeln, vielleicht mit einer Bibliothek wie knockout oder Sie können Ihren aktuellen jQuery-Ajax-Aufruf für eine versteckte Schaltfläche ersetzen, in die Sie Ihren aktuellen Code einfügen und Ihre Gridview und diese Schaltfläche einfügen würden innerhalb eines UpdatePanel und eine teilweise Aktualisierung durchführen.

    
Coastpear 26.07.2015 22:45
quelle
1

Sie können auf diese Weise Datentabelle von der statischen Methode zurückgeben.

%Vor%

Und binden Sie diese Webmethode an j query und Ajax.

    
Musakkhir Sayyed 27.07.2015 05:30
quelle