【发布时间】:2021-03-08 19:08:29
【问题描述】:
我编写了一个 Web 应用程序来从数据库中获取数据,用户可以在其中选择他们想要拥有的数据的开始日期和结束日期,然后提交,然后将其保存到 Excel 文件中。
该应用程序仅在未附加到表单时才有效,但是当我包含开始日期和结束日期时它不会执行任何操作。
这是我的HomeController代码sn-p:
namespace Task1.Controllers
{
public class HomeController : Controller
{
// GET
[HttpGet]
public IActionResult Index()
{
var model = new FormBoard();
var form = new FormBoard.Form();
form.StartDate = DateTime.UtcNow;
form.EndDate = DateTime.UtcNow;
return View(model);
}
[HttpPost]
public IActionResult ExportExcelData(FormBoard viewModel)
{
IEnumerable<ReportData> results;
var connection = @"server=remoteserver;Database=introsw;Uid=root;Pwd=12345";
using var con = new SqlConnection(connection);
{
con.Open();
results = con.Query<ReportData>(@"SELECT
document_date as [DocumentDate],
document_number as [DocumentNumber],
description as [Description],
project__code as [ProjectCode],
project__name as [ProjectName],
client__name as [ClientName],
client__account as [ClientAccount],
total_incl_vat as [TotalIncVat]
FROM
customer_documents_full_view
WHERE
document_date BETWEEN 'StartDate' AND 'EndDate'
");
XLWorkbook workbook = new XLWorkbook();
workbook.Worksheets.Add("Sample").Cell(1, 1).SetValue(results);
var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
MemoryStream memoryStream = new MemoryStream();
workbook.SaveAs((Stream) memoryStream);
memoryStream.Seek(0L, SeekOrigin.Begin);
var content = memoryStream.ToArray();
Console.Write(content);
return File(content, contentType, "Datafile.xlsx");
}
public class ReportData
{
public DateTime DocumentDate { get; set; }
public string DocumentNumber { get; set; }
public string Description { get; set; }
public string ProjectCode { get; set; }
public string ProjectName { get; set; }
public string ClientName { get; set; }
public string ClientAccount { get; set; }
public Decimal TotalIncVat { get; set; }
}
}
}
我的view model表格如下;
using System;
using System.ComponentModel.DataAnnotations;
namespace Task1.ViewModels
{
public class FormBoard
{
public class Form
{
public int Id { get; set; }
// start date
[Required]
public DateTime StartDate { get; set; }
// end data
[Required]
public DateTime EndDate { get; set; }
}
}
}
最后我的view如下,这是我想在数据库中获取用户指定日期的数据;
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@model Task1.ViewModels.FormBoard
@{
ViewData["Title"] = "Index";
}
<!DOCTYPE html>
<html>
<head>
<!-- Compiled and minified CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<!-- Compiled and minified JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<h2>Fill in Date</h2>
<form method="post" asp-controller="Home" asp-action="Index" >
<div>
<label >Start:</label>
<input type="date" name="StartDate"
class="input-validation-error"
data-val="true"
data-val-required="The start date field is required"
id="StartDate" value="">
</div>
<div>
<label >End:</label>
<input type="date" name="EndDate" >
</div>
<div class="center">
<button type="submit" class="btn" >Submit</button>
</div>
</form>
</div>
</div>
</body>
</html>
这就是表单在浏览器中的显示方式,一旦用户单击提交,就会生成一个 Excel 文件,其中包含一个选项,可以从数据库中的数据中保存它,并使用用户指定的日期。
【问题讨论】:
标签: c# asp.net-core-mvc