ASP.NET MVC3: WebGrid + Ajax Filtres + Ajax Tri & Pagination

En gros, je suis en utilisant WebGrid et j'ai besoin de filtrer les résultats. Le premier problème que j'ai ici, c'est que c'est ma première fois avec WebGrid et j'espérais que certains d'entre vous pouvait me donner un coup de main avec elle... jusqu'à présent, j'ai réussi à trier les résultats de grille et le filtre avec de l'Ajax, mais, lors de la re-trier les résultats filtrés, le sous-ensemble est perdu et je reviens au début avec l'ensemble des résultats. Je sais pourquoi il se passe, bien sûr, mais je n'ai pas trouver comment le faire fonctionner.

Exemple:

Sur mon point de vue:

@model IQueryable<Cities>
@section MoreScripts
{
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
}
@using (Ajax.BeginForm(new AjaxOptions { InsertionMode = InsertionMode.Replace,     UpdateTargetId = "GridData"}))
{
<fieldset>
<legend>Search Filters</legend>
<br />
<div>
Name
</div>
<div>
@Html.TextBox("Name")
</div>
<p>
<input type="submit" value="Search" />
</p>
</fieldset>
}
<div id="GridData">
@Html.Partial("Grid", Model)
</div>

Ma Vue Partielle:

@model IQueryable<Cities>
@{
var grid = new WebGrid<Cities>(null,rowsPerPage: 5, defaultSort: "Nombre", ajaxUpdateContainerId: "GridData");
grid.Bind(Model, autoSortAndPage: true, rowCount: Model.Count());
@grid.GetHtml(columns: 
grid.Columns(
grid.Column("Name", "Name", canSort: true),
grid.Column("CreationDate", "Creation Date", canSort: true),
grid.Column("Active", "Active", canSort: true, format: @<text><input type="checkbox" disabled="disabled" value="@item.ID" @(item.Active == true ? "Checked" : null) /></text>),
grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { id = item.Id }, new { @class = "editLink smallCell", @title = "Edit" })),
grid.Column(format: (item) => Html.ActionLink("Delete", "Delete", new { id = item.Id }, new { @class = "deleteLink smallCell", @title = "Delete" }))),
tableStyle: "webgrid",
headerStyle: "webgrid-header",
footerStyle: "webgrid-footer",
alternatingRowStyle: "webgrid-alternating-row",
selectedRowStyle: "webgrid-selected-row",
rowStyle: "webgrid-row-style");    
}

Et enfin ce fais de mal, c'est ici, sur mon contrôleur:

    public ActionResult Index()
{
return View(repository.GetAllRecords().OrderByDescending(f => f.CreationDate));
}
[HttpPost]
public ActionResult Index(string name)
{
var data = repository.GetAllRecords();
if(!string.IsNullOrEmpty(name))
data = data.Where(a => a.Name.Contains(name));
data = data.OrderByDescending(f => f.CreationDate);
return PartialView("Grid", data);
}

Je suis également en utilisant une classe WebGrid : WebGrid comme on le voit ici:
http://archive.msdn.microsoft.com/mag201107WebGrid/Release/ProjectReleases.aspx?ReleaseId=5667

Donc, cela fonctionne très bien pour le filtrage, mais une fois que vous obtenez les résultats filtrés et essayez ensuite de modifier l'ordre de tri de votre rétréci les résultats de recherche, vous perdez les éléments et le nom du paramètre valeur parce que la WebGrid va contre la première action du contrôleur. Probablement, ce n'est pas la meilleure approche, mais comme je l'ai dit, je n'ai jamais utilisé WebGrid donc, je suis prêt à apprendre. Toute aide serait vraiment appréciée. Merci.

Je pense que cette réponse: stackoverflow.com/a/10052663/1651536 permet de résoudre votre problème

OriginalL'auteur met.lord | 2012-02-10

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *