CodeZine(コードジン)

特集ページ一覧

Windows Azure上で「Secure Mail 2.0J」を使ってみよう
~最新の環境で日本語メールを送信する~

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2011/06/23 14:00
目次

Viewデザイン

 ロジック部分が完成したら、コントローラへモデルに記述したロジックを呼び出すコードを記入します。Index関数が2つあるのは、パラメタなしが対応するViewを呼び出したときに実行される関数と、HttpPost属性がついたパラメタありが対応するViewからSubmitされたときに実行される関数の2種類を用意する必要があるためです。

リスト3 コントローラの記述例
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Public Property SendMailService As New SendMailService

    Function Index() As ActionResult
        ViewData("Message") = "ASP.NET MVC へようこそ"

        Return View()
    End Function

    <HttpPost()> _
    Function Index(ByVal model As SendMailModel) As ActionResult
        If ModelState.IsValid Then
            Dim result As String = ""
            If SendMailService.SendMail(model.SmtpServer,
                                        model.SmtpPort,
                                        model.UserID,
                                        model.Password,
                                        model.MailAddress,
                                        model.ToAddress,
                                        model.Subject,
                                        model.Body,
                                        result) Then
                Return RedirectToAction("Thanks", "Home")
            Else
                ModelState.AddModelError("", result)
            End If
        End If
        Return View(model)
    End Function

    Function Thanks() As ActionResult
        Return View()
    End Function
End Class
  1. Index関数では画面入力をパラメタとして引き取ります。パラメタの形式は、対応するモデルになります。
  2. ModelStateのIsValidプロパティがFalseならば「入力値に違反がある」ということなので、すぐにReturn View(model)に制御が移ります。
  3. SendMailService.SendMailメソッドがTrue(メール送信成功)であれば、/Home/Thanks/ページに遷移します。

ビューの作成

 [Views]-[Home]フォルダにあるIndex.vbhtmlファイルを開いて、SendMailModelクラスで定義された項目をHTMLの中に埋め込んでいきます。

リスト4 ビューの記述例
@ModelType CZ1106Mvc3.SendMailModel
  
@Code
    ViewData("Title") = "ホーム ページ"
End Code

<h2>@ViewData("Message")</h2>
@Using Html.BeginForm()
    @Html.ValidationSummary(True, "メール送信に失敗しました。エラーを修正し、再試行してください。")
    @<div>
        <fieldset>
            <legend>メール送信</legend>
            <div class="editor-label">
                @Html.LabelFor(Function(m) m.SmtpServer)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(Function(m) m.SmtpServer)
                @Html.ValidationMessageFor(Function(m) m.SmtpServer)
            </div>
                :
                (中略)
                :
            <p>
                <input type="submit" value="送信" />
            </p>
        </fieldset>
    </div>
End Using

 今回のViewはビューエンジンに「ASPX」ではなく「Razor」を採用しているため、HTMLにかなり近い記法になっています。

 Razorらしい記述の1つとして、HTMLヘルパーによるレンダリングがあります。@Html.LabelFor、@Html.TextBoxFor、@Html.ValidationMessageForはすべて「Function(m) m.SmtpServer」というラムダ式をパラメタとして指定していますが、この3つのレンダリング結果はそれぞれ異なります。

  • @Html.LabelFor:LabelForはSmtpServerプロパティのDisplay属性の設定値を表示するHTMLヘルパーなのでレンダリング結果はDisplay属性に指定されている「SMTPサーバ」になります。
  • @Html.TextBoxFor:TextBoxForはSmtpServerプロパティの値をINPUTタブとして表示入力するHTMLヘルパーになります。
  • @Html.ValidationMessageFor:ValidationMessageForはSmtpServerプロパティのRequired属性などのValidation関連の設定値を該当するValidationが発生したときに表示するためのHTMLヘルパーになります。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • 初音玲(ハツネアキラ)

     国内SIerのSEでパッケージ製品開発を主に行っており、最近は、空間認識や音声認識などを応用した製品を手掛けています。  個人的には、仕事の内容をさらに拡張したHoloLensなどのMRを中心に活動しています。  Microsoft MVP for Windows Development...

バックナンバー

連載:現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(Secure Mail)
All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5