This question is locked. New answers and comments are not allowed.
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));
}
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));
}