Createアクションでユーザーに表示する単純なフォームがあります。フォームを送信した後、フォームのコピーを送信する電子メール アドレスを入力できる新しい確認ビューを表示します。
電子メールを適切に記入するために、記入したMonthlyReport
ばかりのフォームのすべてのデータを保持する必要があります。ただし、確認ビューからの 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>
}