1

強く型付けされたモデルを MvcMailer ビューに渡す際に問題に直面しています。私はasp.net mvc3を使用しており、nugetを使用してMvcMailer3をインストールしています。

エラー メッセージは表示されず、メッセージは正常に送信されますが、データ フィールドは入力されません。ViewBagフィールドを使用してすべてを試しましたが、同じ問題が発生しました-つまり、メッセージは正常に送信されましたが、フィールドにデータが入力されていません...

助けてください...私は2日間立ち往生しています!

これが私のコントローラーとビューコードです....

//コントローラーコード

public ActionResult Index()
    {

        string invoicenumber = "BC-00000002";
        IEnumerable<Quantum.Models.usp_MasterPrintInvoice_Result> mpi = db.usp_MasterPrintInvoice(invoicenumber);

        IEnumerable<PrintDetailObject> printdetailobj = from anmpi in mpi select new PrintDetailObject { Head = anmpi.Head, ContributorName = anmpi.Name, RegistrationNumber = anmpi.RegistrationNumber, InvoiceNumber = anmpi.InvoiceNumber, InvoiceDate = anmpi.Date, Amount = anmpi.Amount, PaymentMonth = anmpi.Month, ReceivedBy = anmpi.Operator };


        ViewData.Model = printdetailobj.FirstOrDefault();



        IUserMailer mailer = new UserMailer();            
        mailer.Welcome().Send();
        return View();
    }

コードを表示

 @model Quantum.Models.PrintDetailObject

@using Mvc.Mailer

<h2>Invoice</h2>


<fieldset>

<div class="print-details-page">
    <legend>@Html.DisplayFor(model => model.Head)</legend>

    <div class="display-label">InvoiceNumber</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.InvoiceNumber)
    </div>
    <div class="clear"></div>   
    <div class="display-label">Date</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.InvoiceDate)

    </div>
    <div class="clear"></div>   
    <div class="display-label">Recieved From:</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.ContributorName)
    </div>
    <div class="clear"></div>   
    <div class="display-label">Registration Number:</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.RegistrationNumber)
    </div>
    <div class="clear"></div>      

    <div class="display-label">Amount:</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Amount)
    </div>
    <div class="clear"></div>   
    <div class="display-label">Amount in Text:</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.AmountText)
    </div>
    <div class="clear"></div>   
    <div class="display-label">Month:</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.PaymentMonth)
    </div>
    <div class="clear"></div>   

    <div class="display-label">Recieved By:</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.ReceivedBy)
    </div>
    <div class="clear"></div>  
    <br />
    <p>Received with many thanks.</p>

</div>

</fieldset>

メール本文として次のテキストしか取得できません。

Invoice


InvoiceNumber
Date
Recieved From:
Registration Number:
Amount:
Amount in Text:
Month:
Recieved By:

Received with many thanks.
4

1 に答える 1

1

こんにちは、私は自分の質問に答える洞察を得ました。

実際、「SendEmail」コントローラー内でViewData.Modelを使用すると、モデルは独自のビュー、つまり「インデックス」ビューで使用できます。私の場合は「Welcome」という名前の「UserMailer」コントローラーで使用されるカミソリビューではありません。

モデルを「UserMailer」アクションに渡すには、次の変更を行う必要があります。

//IUserMailer コード

    ...
    public interface IUserMailer
            {
                MvcMailMessage Welcome(PrintDetailObject myModel);
            }

//UserMailer コード

    public virtual MvcMailMessage Welcome(PrintDetailObject myModel)
            {
                //ViewBag.Data = someObject;
                ViewData.Model = myModel;

                return Populate(x =>
                {
                    x.Subject = "Welcome";
                    x.ViewName = "Welcome";

                    x.To.Add("cmmwahid@hotmail.com");

                });
            }

//そして最後にコントローラーコード

public ActionResult Index()
        {

            string invoicenumber = "BC-00000002";
            IEnumerable<Quantum.Models.usp_MasterPrintInvoice_Result> mpi = db.usp_MasterPrintInvoice(invoicenumber);

            IEnumerable<PrintDetailObject> printdetailobj = from anmpi in mpi select new PrintDetailObject { Head = anmpi.Head, ContributorName = anmpi.Name, RegistrationNumber = anmpi.RegistrationNumber, InvoiceNumber = anmpi.InvoiceNumber, InvoiceDate = anmpi.Date, Amount = anmpi.Amount, PaymentMonth = anmpi.Month, ReceivedBy = anmpi.Operator };



            IUserMailer mailer = new UserMailer();
            mailer.Welcome(printdetailobj.FirstOrDefault()).Send();
            return View();
        }

電子メール本文としての最終出力は次のとおりです。

Invoice

Generous Contribution
InvoiceNumber
BC-00000002
Date
15/02/2014
Recieved From:
Some Donor 
Registration Number:
M104/6
Amount:
$23.00
Amount in Text:
Twenty Three Dollars Only
Month:
May/2014
Recieved By:
someuser

Received with many thanks.
于 2014-02-21T12:59:25.143 に答える