Просмотр обновляется во время изменения pagedlistpager
Привет,
Я создал список страниц в представлении mvc. Но теперь, когда я делаю разбиение на страницы, мои свойства объекта модели теряются на 2-й странице и после страниц. Я создаю страницу отчета на основе фильтра. Итак, каков наилучший процесс для достижения этой цели ?
Что я уже пробовал:
Вот мой класс моделей
public partial class log_master { [Key] public long log_id { get; set; } [Display(Name ="User")] public string logged_user { get; set; } [Display(Name ="Process Name")] public string controller_name { get; set; } [Display(Name ="Action Name")] public string action_name { get; set; } [Display(Name ="Task")] public string log_msg { get; set; } [Display(Name ="DateTime")] public Nullable<System.DateTime> log_time { get; set; } public string log_route { get; set; } public int? PageCount { get; set; } public int? PageNumber { get; set; } }
Вот мой класс модели представления для фильтрации
public class LogMasterViewModel { [Key] public int lmvm_id { get; set; } [Display(Name = "Personal Number")] public string pNumber { get; set; } [Display(Name = "Process Name")] public string ProcessName { get; set; } [Display(Name = "From"), DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true), Required(ErrorMessage = "Please Select From Date")] public Nullable<System.DateTime> FromDate { get; set; } [Display(Name = "To"), DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true), Required(ErrorMessage = "Please Select To Date")] public Nullable<System.DateTime> ToDate { get; set; } public IPagedList<log_master> LogList { get; set; } }
Я создал свой контроллер таким образом.
// GET: Admin/LogReport
public ActionResult Index(LogMasterViewModel lmvm, int? Page_no) { TestEntities db = new Models.TestEntities(); if (Session["loginid"] == null) { return RedirectToAction("Index", "Login", new { area = "" }); } try { // Getting list of processes from error log ViewBag.ProcessList = new SelectList(GetLogProcess() as List<SelectListItem>, "Value", "Text"); if (lmvm.FromDate.HasValue && lmvm.ToDate.HasValue) { int pageSize = 10; int pageIndex = 1; pageIndex = Page_no.HasValue ? Convert.ToInt32(Page_no) : 1; var result = (from lm in db.log_master where DbFunctions.TruncateTime(lm.log_time) >= DbFunctions.TruncateTime(lmvm.FromDate) && DbFunctions.TruncateTime(lm.log_time) <= DbFunctions.TruncateTime(lmvm.ToDate) select lm).ToList(); if (!string.IsNullOrEmpty(lmvm.pNumber)) result = result.Where(x => x.logged_user.ToUpper() == lmvm.pNumber.ToUpper()).ToList(); if (!string.IsNullOrEmpty(lmvm.ProcessName)) result = result.Where(x => x.controller_name.ToUpper() == lmvm.ProcessName.ToUpper()).ToList(); lmvm.LogList = result.ToPagedList(pageIndex, pageSize); if (!Page_no.HasValue) DBHelper.InsertLog(Convert.ToString(Session["loginid"]), "LogReport", "Index-Get", "Display Report-" + sbfilter.ToString()); } } catch (Exception ex) { DBHelper.InsertErrorLog(Convert.ToString(Session["loginid"]), "LogReport", "Index-Get", ex.HResult.ToString(), ex.InnerException != null ? ex.InnerException.Message.ToString() : ex.Message.ToString()); } return View(lmvm); }
На мой взгляд
@model INBA.Models.LogMasterViewModel @using PagedList.Mvc; <link href="~/Content/PagedList.css" rel="stylesheet" /> @{ ViewBag.Title = "Index"; Layout = "~/Areas/Admin/Views/Shared/_LayoutAdmin.cshtml"; } <div style="width:90%; margin:10px auto;"> <h5>User Activity Report</h5> <hr /> @using (Html.BeginForm("Index", "LogReport", FormMethod.Get)) { @Html.AntiForgeryToken() <div class="form-horizontal"> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="table-responsive"> <table class="table table-borderless"> <tr> <td> @Html.LabelFor(model => model.pNumber, htmlAttributes: new { @class = "control-label col-md-12" }) </td> <td> @Html.EditorFor(model => model.pNumber, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.pNumber, "", new { @class = "text-danger" }) </td> <td> @Html.LabelFor(model => model.ProcessName, htmlAttributes: new { @class = "control-label col-md-12" }) </td> <td> @Html.DropDownListFor(model => model.ProcessName, (SelectList)ViewBag.ProcessList, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.ProcessName, "", new { @class = "text-danger" }) </td> </tr> <tr> <td> @Html.LabelFor(model => model.FromDate, htmlAttributes: new { @class = "control-label col-md-12" }) </td> <td> @Html.EditorFor(model => model.FromDate, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.FromDate, "", new { @class = "text-danger" }) </td> <td> @Html.LabelFor(model => model.ToDate, htmlAttributes: new { @class = "control-label col-md-12" }) </td> <td> @Html.EditorFor(model => model.ToDate, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.ToDate, "", new { @class = "text-danger" }) </td> </tr> <tr> <td></td> <td></td> <td></td> <td> <input type="submit" value="Get Report" class="btn btn-default" /> <input type="submit" value="Download Report" formaction="ExportToExcel" formmethod="post" class="btn btn-default" /> </td> </tr> </table> </div> </div> <hr /> <div id="content_table" class="table-responsive"> @if (Model.LogList != null) { <table class="table table-bordered table-striped"> <thead> <tr class="table-primary" style="white-space:nowrap;"> <td>Logged User</td> <td>Process</td> <td>Action</td> <td>DateTime</td> <td>Activity</td> </tr> </thead> @if (Model.LogList.Count > 0) { foreach (var item in Model.LogList) { <tr> <td> @item.logged_user </td> <td> @item.controller_name </td> <td> @item.action_name </td> <td> @item.log_time </td> <td> @item.log_msg </td> </tr> } } </table> <div style="text-align:center;"> Page @(Model.LogList.PageCount < Model.LogList.PageNumber ? 0 : Model.LogList.PageNumber) of @Model.LogList.PageCount @Html.PagedListPager(Model.LogList, Page => Url.Action("Index", new { Page_no = Page, Model.FromDate, Model.ToDate, Model.pNumber, Model.ProcessName })) Showing @Model.LogList.FirstItemOnPage to @Model.LogList.LastItemOnPage of @Model.LogList.TotalItemCount </div> } </div> } </div>