This is a migrated thread and some comments may be shown as answers.

[Solved] paging/sorting calls Controller Index (Get) why?

1 Answer 130 Views
Grid
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
chris petropoulos
Top achievements
Rank 1
chris petropoulos asked on 07 Sep 2011, 06:33 PM
Hi there,

Please forgive me for my ignorance, however i have a problem in handling paging and sorting. When i click search button, the controller Index [HttpPost] method gets called correctly and grid is populated as expected. However when i click any column to sort or click a page number, it then calls the controller Index [HttpGet] method? As a result, its reverting back to the initial values of the search controls :( I suspect i may have implemented this totally wrong. So why is the Index method being called when Paging/Sorting is clicked? And what can i do to fix this problem?

I have a view defined as follows:

@model IEnumerable<TAC.Model.vwTimesheet>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm()) {    
    <fieldset>
        <legend>Search Filter</legend>
            @Html.Label("Date Range") @(Html.Telerik().DropDownList().Name("dlDateRange").Items(item=>
                                  {
                                      item.Add().Text("Current Month").Value("1").Selected(true);
                                      item.Add().Text("Previous Month").Value("2");
                                      item.Add().Text("Current Week").Value("3");
                                      item.Add().Text("Previous Week").Value("4");
                                      item.Add().Text("<-- Date Range -->").Value("5");
                                  }))                                      
            @Html.Label("User(s)") @(Html.Telerik().DropDownList().Name("dlUsers").BindTo(new SelectList(ViewBag.Users,"UserID","UserFullName")))
            @Html.Label("Start Date") @(Html.Telerik().DatePicker().Name("dpStartDate").Value(ViewBag.StartDate))
            @Html.Label("End Date") @(Html.Telerik().DatePicker().Name("dpEndDate").Value(ViewBag.EndDate))
            <input type="submit" value="Search" />
    </fieldset>
}

@Html.Telerik().Grid(Model).Name("Grid").Pageable().Sortable().Columns(columns =>
{
    columns.Bound(o => o.UserEmailAddress).Title("Email Address");
    columns.Bound(o => o.UserFullName).Title("User");
    columns.Bound(o => o.CompanyName).Title("Customer");
    columns.Bound(o => o.ProjectName).Title("Project");
    columns.Bound(o => o.TaskName).Title("Task");
    columns.Bound(o => o.TimeDate).Title("Date");
    columns.Bound(o => o.TimeHours).Title("Hours");
    columns.Bound(o => o.CostRate).Title("Cost Rate");
    columns.Bound(o => o.BillRate).Title("Bill Rate");
    columns.Bound(o => o.TimeDescription).Title("Description");
})

I have a controller that has methods defined as follows:

public ViewResult Index()
{
    DateTime startDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).Date;
    DateTime endDate = startDate.AddMonths(1).AddDays(-1).Date.AddDays(1).AddSeconds(-1);
    ViewBag.StartDate = startDate;
    ViewBag.EndDate = endDate;
    var users = userWithSubcontractorRepository.All.Where(x => x.CompanyID == 51).ToList();
    users.Insert(0, new Model.vwUserWithSubcontractor { UserID = 0, UserFullName = "<-- All Users -->" });
    ViewBag.Users = users;
    return View(timesheetRepository.All.Where(x => x.CompanyID == 51 && x.TimeDate >= startDate && x.TimeDate <= endDate));
}

[HttpPost]
public ViewResult Index(FormCollection form)
{
    var dateRange = int.Parse(form["dlDateRange"]);
    switch (dateRange)
    {
        case (int)DateRangeType.DateRange:
            ViewBag.StartDate = DateTime.Parse(form["dpStartDate"]);
            ViewBag.EndDate = DateTime.Parse(form["dpEndDate"]);
            break;
        case (int)DateRangeType.PreviousMonth:
            ViewBag.StartDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(-1);
            ViewBag.EndDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddDays(-1);                    
            break;
        case (int)DateRangeType.CurrentMonth:
            ViewBag.StartDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);
            ViewBag.EndDate = ViewBag.StartDate.AddMonths(1).AddDays(-1);
            break;
        case (int)DateRangeType.PreviousWeek:
            ViewBag.StartDate = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek - 6);
            ViewBag.EndDate = ViewBag.StartDate.AddDays(6);
            break;
        case (int)DateRangeType.CurrentWeek:
            ViewBag.StartDate = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek + 1);
            ViewBag.EndDate = ViewBag.StartDate.AddDays(6);                    
            break;
    }
    var users = userWithSubcontractorRepository.All.Where(x => x.CompanyID == 51).ToList();
    users.Insert(0, new Model.vwUserWithSubcontractor { UserID = 0, UserFullName = "<-- All Users -->" });
    ViewBag.Users = users;
    var user = int.Parse(form["dlUsers"]);
    DateTime startDate = ViewBag.StartDate;
    DateTime endDate = ViewBag.EndDate;
    startDate = startDate.Date;
    endDate = endDate.Date.AddDays(1).AddSeconds(-1);
    if (user != 0)
        return View(timesheetRepository.All.Where(x => x.CompanyID == 51 && x.TimeDate >= startDate && x.TimeDate <= endDate && x.UserID == user));
    else
        return View(timesheetRepository.All.Where(x => x.CompanyID == 51 && x.TimeDate >= startDate && x.TimeDate <= endDate));
}

1 Answer, 1 is accepted

Sort by
0
Vijay
Top achievements
Rank 1
answered on 28 Dec 2012, 10:40 AM
HI,

I have same problme.. If you know then pls let me know the solution.

Thanks,
Vijay
Tags
Grid
Asked by
chris petropoulos
Top achievements
Rank 1
Answers by
Vijay
Top achievements
Rank 1
Share this question
or