我正在寻找一种在通过表单发布后保留 url 参数的方法。例如,我的 GET 方法采用字符串“type”并使用它来确定要在视图中呈现的报告类型。网址如下所示:
http://mysite/Reports/Report?type=1
[HttpGet]
public ActionResult Report(string type)
{
var model = new ReportsModel()
{
Report = ReportList.Find(o => o.ReportType == type)
};
return View(model);
}
视图有一个表单,该表单具有开始/结束日期过滤器,用于确定要为报告类型显示的日期的日期范围:
@using (Html.BeginForm("Report", "Reports"))
{
Report.ReportName
@Html.HiddenFor(o => o.Report.ReportType)
@Html.EditorFor(o => o.Report.StartDate )<br/>
@Html.EditorFor(o => o.Report.EndDate )<br/>
<button id="reports">Report</button>
}
上面的表单发布到一个操作,该操作根据指定的报告类型、开始/结束日期从数据库中获取报告数据,然后返回到视图。
[HttpPost]
public ActionResult Report(GenericReportsModel model)
{
switch (model.Report.ReportType)
{
case ReportType.ReportType1:
model.Result = ReportRepository.GetReport<ReportType1>(model.StartDate, model.EndDate);
break;
case ReportType.ReportType2:
model.Result = ReportRepository.GetReport<ReportType2>(model.StartDate, model.EndDate);
break;
}
return View(model);
}
问题是在发布之后,“类型”参数从 url 中丢失了。
Before the post: http://mysite/Reports/Report?type=1
After the post: http://mysite/Reports/Report
我需要能够做这样的事情(这不起作用):
return View(model, new {ReportType = model.ReportType);
如果有人想复制并粘贴 url 发送给其他人,我如何在帖子后保留 url 中的类型参数?