grid.mvc use filtered Result in Controller

十年热恋 提交于 2020-01-11 03:59:47

问题


I'am using grid.mvc(http://gridmvc.codeplex.com/) for filtering and sorting. Does anybody know how to process the filtered result in an action controller. I'm trying to pass a hidden field via FormCollection, but cause of paging only the visible Values are passed. Or is there any good alternative grid in mvc where you can filter and sort and use the filtered result for an action in and MVCController?

_customersGrid.cshtml

    @using GridMvc.Html
@using GridMvc.Site.Models
@using GridMvc.Sorting
@model GridMvc.Site.Models.Grids.CustomersGrid

@{
    ViewBag.Title = "_CustomersGrid";
}

<h2>_PersonsGrid</h2>
@Html.Grid(Model).Named("customersGrid").Columns(columns =>
    {

        columns.Add(o => o.CustomerID)
            .Encoded(false)
        .Sanitized(false)
        .SetWidth(30)
             .RenderValueAs(o => Html.Hidden("CustomerID", o.CustomerID));

        columns.Add(o => o.CompanyName)
                .Titled("Name")
                .SetWidth(110);

        columns.Add(o => o.Phone)
               .Titled("Phone")
               .SetWidth(250);


    }).WithPaging(15).Sortable().Filterable().WithMultipleFilters()

Index.cshtml

@{
    ViewBag.Title = "Home";
}

    @using (Html.BeginForm(null, null, FormMethod.Post, new { @class = "form-horizontal" }))
{   

<fieldset>
<legend></legend>

        @Html.Action("Grid") @* grid in a partial view *@

          <p>
             @Html.ActionLink("Back", "Index",null,new { @class = "btn", @accesskey="b" }) 
       <button type="submit"  class="btn btn-primary" accesskey="s" ><u>S</u>ave</button>
        </p>


    </fieldset>
}

HomeController Actions

 public ActionResult Index()
        {


            return View();
        }
        [HttpPost]
        public ActionResult Index(  FormCollection form)
        {
            var filterSettings = Session["grid-filters"] as IGridFilterSettings;
            var url = new UriBuilder(Url.Action(null, null, null, Request.Url.Scheme));
            if (filterSettings != null)
                url.Query = GetGridFilterQueryString(filterSettings); //restore grid filter settings


            /* How to get the filtered values from grid insteat from formcollection*/
           var chckedValues = form.GetValues("CustomerId");

            foreach (var id in chckedValues)
            {
                //Do something
                Debug.WriteLine(id);
            };


            ViewBag.ActiveMenuTitle = "Demo";
            return Redirect(url.ToString());
        }

        public ActionResult Grid()
        {
            var repository = new CustomersRepository();
            var grid = new CustomersGrid(repository.GetAll());



            Session["grid-filters"] = grid.Settings.FilterSettings;//store grid filters in the session
            return PartialView("_CustomersGrid", grid);

        }

回答1:


I finally found the way to send only filtered results to controller. The solution is to save the selection to session on the "Shared/_Grid.cshtml" page like this:

@helper RenderGridBody()
{
if (!Model.ItemsToDisplay.Any())
{
<tr class="grid-empty-text">
    <td colspan="@Model.Columns.Count()">
        @Model.EmptyGridText

    </td>
</tr>
}
else
{
    Session["Items"]=Model.ItemsToDisplay;
    foreach (object item in Model.ItemsToDisplay)
    {
<tr class="grid-row @Model.GetRowCssClasses(item)">
    @foreach (IGridColumn column in Model.Columns)
    {
        @column.CellRenderer.Render(column, column.GetCell(item))
    }
</tr>
    }
}
} 

When the Grid.MVC is populated with data, the selection is saved to session that can be used later in the controller when executing an action.

In the controller, you only have to call and cast the variable into the correct type:

public ActionResult MyController()
    {
        var SelectedRows = (List<ModelType>)Session["Items"];

        List<ModelType> listStats = SelectedRows;

        // the rest of the controller code
}

I hope that will be helpful :)



来源:https://stackoverflow.com/questions/23806174/grid-mvc-use-filtered-result-in-controller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!