MvcMailer的强类型模型
问题描述:
我正面临将强类型模型传递给MvcMailer视图的麻烦。我正在使用asp.net mvc3并使用nuget安装MvcMailer3。MvcMailer的强类型模型
没有错误消息和消息成功发送,但未填充数据字段。我正在做的一切也尝试使用ViewBag领域,但同样的问题 - 这是消息发送成功,但字段不填充...
请帮助...我坚持了两天!
这里是我的控制器和视图代码....
//控制器代码
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.
答
嗨,我刚刚得到了解答我自己的问题。
实际上,当我在“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("[email protected]");
});
}
//和最后控制器代码
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.