Мне нужно искать между двумя датами (от даты, до даты), используя ядро платформы сущностей с TempData, но до сих пор у меня возникают некоторые проблемы.
Вот код длямодель
[DataType(DataType.DateTime)]
[DisplayName("Activity Log Date Time")]
public DateTime ActivityLogDateTime { get; set; }
и код контроллера:
[HttpPost(Name = "Index")]
public async Task<IActionResult> Index(int? page, DateTime fromDate, DateTime toDate, string operation, string userName, string pageName, string number)
{
//Viewbag information for view
ViewBag.fromDate = fromDate;
ViewBag.toDate = toDate;
ViewBag.operation = operation;
ViewBag.userName = userName;
ViewBag.pageName = pageName;
//To store search data
TempData["fromDate"] = fromDate;
TempData["toDate"] = toDate;
TempData["operation"] = operation;
TempData["userName"] = userName;
TempData["pageName"] = pageName;
//Check if number == null then put default value 10
if (number == null)
{
number = "10";
}
//Record Activity Logs
activity.PageId = 1;
var name = await db.Pages.FindAsync(activity.PageId);
activity.Username = User.Identity.Name;
activity.Operation = "Search";
activity.Description = "Username: (" + User.Identity.Name + ") search in page number " + activity.PageId.ToString() + " (" + name.PageName + ")";
activity.TechnicalDescription = "Username = " + User.Identity.Name + ", PageId = " + activity.PageId.ToString() + ", fromDate = " + fromDate
+ ", toDate = " + toDate + ", operation = " + operation + ", username = " + userName + ", pagename = " + pageName;
activity.ActivityLogDateTime = DateTime.Now;
//End Record Activity Logs
db.ActivityLogs.Add(activity);
await db.SaveChangesAsync();
if (fromDate.Year.ToString().Equals("1") && toDate.Year.ToString().Equals("1") && operation == null && userName == null && pageName == null)
{
return View(await db.ActivityLogs.Include(x => x.Pages).OrderByDescending(x => x.ActivityLogDateTime).ToPagedListAsync(page ?? 1, 10));
}
else
{
return View(await db.ActivityLogs.Include(x => x.Pages).OrderByDescending(x => x.ActivityLogDateTime)
.Where(x => x.ActivityLogDateTime >= fromDate && x.ActivityLogDateTime <= toDate && string.IsNullOrEmpty(operation) ? true : x.Operation.Contains(operation)
&& string.IsNullOrEmpty(userName) ? true : x.Username.Contains(userName) && string.IsNullOrEmpty(pageName) ? true : x.Pages.PageName.Contains(pageName))
.ToPagedListAsync(page ?? 1, int.Parse(number)));
}
}
public FileResult ExportExcel()
{
DataTable dt = new DataTable("Grid");
dt.Columns.AddRange(new DataColumn[7] { new DataColumn("Activity Logs Id"),
new DataColumn("Date and Time"),
new DataColumn("Username"),
new DataColumn("Operation"),
new DataColumn("Description"),
new DataColumn("Technical Description"),
new DataColumn("PageName")});
var report = new List<ActivityLogs>();
if (Convert.ToDateTime(TempData["fromDate"].ToString()).Year.ToString().Equals("1") && Convert.ToDateTime(TempData["toDate"]).Year.ToString().Equals("1")
&& TempData["operation"].ToString() == null && TempData["userName"].ToString() == null && TempData["pageName"].ToString() == null)
{
report = db.ActivityLogs.Include(x => x.Pages).OrderByDescending(x => x.ActivityLogDateTime).ToList();
}
else
{
report = db.ActivityLogs.Include(x => x.Pages).OrderByDescending(x => x.ActivityLogDateTime)
.Where(x => x.ActivityLogDateTime >= Convert.ToDateTime(TempData["fromDate"].ToString()) && x.ActivityLogDateTime <= Convert.ToDateTime(TempData["toDate"].ToString())
&& string.IsNullOrEmpty(TempData["operation"].ToString()) ? true : x.Operation.Contains(TempData["operation"].ToString())
&& string.IsNullOrEmpty(TempData["userName"].ToString()) ? true : x.Username.Contains(TempData["userName"].ToString())
&& string.IsNullOrEmpty(TempData["pageName"].ToString()) ? true : x.Pages.PageName.Contains(TempData["pageName"].ToString())).ToList();
}
foreach (var item in report)
{
dt.Rows.Add(item.ActivityLogId, item.ActivityLogDateTime, item.Username, item.Operation, item.Description, item.TechnicalDescription,
item.Pages.PageName);
}
using (XLWorkbook wb = new XLWorkbook())
{
wb.Worksheets.Add(dt);
using (MemoryStream stream = new MemoryStream())
{
wb.SaveAs(stream);
return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "ActivityLogs " + DateTime.Now +".xlsx");
}
}
}
Когда мне нужно экспортировать файлы Excel, я обнаружил эту ошибку:
NullReferenceException: Ссылка на объект не установлена для экземпляра объекта.
InvalidOperationException: Исключительная ситуация при попытке оценить выражение параметра запроса LINQ. Чтобы показать дополнительную информацию, вызовите EnableSensitiveDataLogging () при переопределении DbContext.OnConfiguring.
Мой код работает так:
- При поиске пользователя поставьте критерии поиска(от даты к дате ...)
- Затем пользователь нажимает кнопку поиска
- После этого они могут экспортировать данные поиска, которые он ищет, потому что я сохранил данные поиска в словаре TempData []и передал этот словарь TempData [] в ExportExcel FileResult.
Как мне решить эту проблему?