0

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>
}
4

1 に答える 1