So ändern Sie WebGrid-Aktion für erste-Daten (.NET MVC3)
Habe ich eine Partial View rendert WebGrid. Mein controller sieht aus wie
public ActionResult Index()
{
return View();
}
public ActionResult GetUserList(int? page, string sort, string sortdir)
{
var model = UserModel.getList(page,sort,sortdir);
return PartialView("_UserList",model);
}
Index.cshtml :
....
@Html.Action("GetUserList")
Das problem ist, dass jedes mal, wenn ich auf grid-navigation oder Sortieren von links ruft es Index
Methode. Wie kann ich machen, Webgrid zu führen eine andere Aktion (GetUserList
in diesem Fall)? Ich bin sicher, ich kann prepend GetUserList
alle links im Netz mit Hilfe der jquery, aber ich glaube, es sollte einen besseren Weg geben.
Es ist auch möglich, dass das, was ich Tue, ist völlig falsch, also danke für Eure Vorschläge.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach viel monkeying um und Graben (und auch das hantieren mit Reflektor, mit WebGrid source-code), kam ich zu dem Schluss, dass mit WebGrid, Sie können nicht Steuern/ändern Sie die Header-link-Aktion.
Erstellen der header-link-URL, der Pfad wird aus
HttpContext.Request.Path
, so gibt es keinen Weg, um es auf eine andere route.Einer sehr hässlicher hack wäre zu erschließen, um jQuery-Ajax-events (da die header-link jQuery verwendet.Last Sortieren) und überschreiben Sie die URL:
Bessere Lösung wäre die Verwendung von:
@MrChief hatte die Idee oben über den hässlichen hack...ich leg das zusammen. Hier ist der Haupt-code, die ich verwendet, um dies zu tun. Es tut, in der Tat, entführen die ajax-Aufruf, bevor es auf den Draht. Der Schlüssel ist, ändern Sie die URL, die ist immer geschickt, weil die Gitter zu greifen, die URL aus HttpContext.Anfrage.Pfad. und stecken Sie es in die onclick-für das anchor-element.
Lege ich diese in mein main common.js und einfach befestigen Sie eine Funktion zur Erfassung der ajaxSend Ereignis, das geschieht, kurz bevor die Daten gesendet werden.
Beim Rendern der Seite, ich habe markiert den tag in der Spalte header, der enthält die falsche URL mit einer Klasse namens "redosorturl', so weiß ich, wenn ich hijack den ajax-Aufruf, der Betrieb hat zu sein getan auf dieses element. Ich habe dann eine benutzerdefinierte Funktion aufzurufen, das gibt mir die richtige URL, dann die ajaxOptions.url wird dann überarbeitet, die neue URL.
Habe ich zu übergeben, die activeElement zu, dass die rewrite-Funktion, so kann ich die traverse den DOM, um die grid-information, wo ich Daten wie der controller und die action-Methode, die verwendet wird, zusammen mit und IDs und andere Informationen, die ich für die URL. Ebenfalls, ich pass in die aktuelle url-Zeichenfolge, weil die Gitter Spritzen, ein token am Ende der url, die ich parse aus und setzen Sie auf die neue url.
Ihre Schlussfolgerung ist nicht richtig. Müssen Sie nur wickeln Sie Ihre webgrid mit einem Get-Formular:
Die hiddens sind, so dass die Art von dir und Sortieren Feld am Ende in parseable form in den querystring. Sie am Ende mit urls wie localhost/ThingaMaBob/GetUserList?someotherfields=was=&sort=city&sortdir=ASC
Wenn Sie entfernen [HttpPost] - Attribut und lassen Sie die route zu kommen, um die gleiche Funktion. finden Sie die Request["page"] - Wert in der Methode. dies ermöglicht es Ihnen, setzen Sie ein Häkchen auf Anfrage["Seite"] - Wert.