我有一个简单的表单,我通过创建操作向用户显示。提交表单后,我会向他们显示一个新的确认视图,他们可以在这里输入他们的电子邮件地址,然后发送一份表格。
为了正确填写电子邮件,我需要保留刚刚完成的MonthlyReport
表单中的所有数据。但是,我发现很难在Confirmation视图中保留Get和Post请求中的报告数据。
当我从确认页面发帖时,我发现我的ConfirmationViewModel
不再包含有效报告。
[HttpPost]
public ViewResult Create(MonthlyReport model)
{
if (ModelState.IsValid)
{
var modelDto = _factory.CreateDataTransferObject(model);
_repository.Submit(modelDto);
ModelState.Clear();
return Confirmation(model);
}
return Create();
}
[HttpGet]
public ViewResult Confirmation(MonthlyReport model)
{
var confirmation = new ConfirmationViewModel();
confirmation.Report = model;
return View("Confirmation", confirmation);
}
[HttpPost]
public ViewResult Confirmation(ConfirmationViewModel model)
{
if (ModelState.IsValid)
{
try
{
var email = _mailer.MonthlyReportEmail(model);
email.DeliverAsync();
}
catch (Exception error)
{
Trace.WriteLine(String.Format("Sending mail failed: {0}", error));
}
TempData["message"] = "Confirmation e-mail sent.";
}
return View("Confirmation");
}
以下是确认视图:
@model Domain.Entities.ConfirmationViewModel
@{
ViewBag.Title = "Confirmation";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Monthly report for @Model.Report.LearnerName has been saved.</h2>
@using (Html.BeginForm("Confirmation", "MonthlyReport", Model))
{
<h4>Enter your e-mail address to receive a copy of the report.</h4>
<table>
<tr>
<td colspan="2">@Html.ValidationMessageFor(x => x.EmailAddress)</td>
</tr>
<tr>
<td>@Html.TextBoxFor(x => x.EmailAddress, new { @class = "input-field" })</td>
<td>
<input type="submit" class="small-submit-button" value="Send" />
</td>
</tr>
</table>
}
答案 0 :(得分:2)
当您显示Confirmation
视图时,您将通过Create
操作传递已发布的模型。
在发布Confirmation
表单后,您将在输入中发布数据。由于您没有报告属性的输入...此信息不会发布。
你有一些选择:
TempData
或会话中。