我正在使用MvcMailer并尝试传递计算值。用户在向导表单(文本框,单选按钮列表等)中输入信息后计算这些值。很抱歉,如果这是冗长的,但我想尽可能多地提供上下文,以避免“显示更多代码”评论。我正在使用视图模型(QuoteData
)。我的“价格”保存在模型中(PriceQuote
)。
以下是Calculation.cs
中的示例计算(以及随附的“总计”代码):
public decimal decOne(QuoteData quoteData)
{
if (quoteData.Step.RadioButtonOne == Step.EnumOne.ChoiceOne)
return PriceQuote.priceOne;
else
return 0;
}
....
public decimal TotalOne(QuoteData quoteData)
{
decimal totalOne = PriceQuote.priceBase;
total += this.decOne(quoteData);
....
return total;
}
我的视图模型是这样的(不确定这是否正确,或者这是否应该进行一些计算):
public class QuoteData
{
public Calculations Calculations { get; set; }
....
}
public QuoteData()
{
Calculations = new Caluclations();
}
我之前为模拟目的所做的是把它放在模拟控制器中的一个动作中:
Calculations calc = new Calculations();
var totalone = calc.TotalOne(quoteData);
ViewBag.CalculateTotalOne = totalone;
return View(quoteData);
我在页面中这么称呼它:
@((ViewBag.CalculationTotalOne).ToString("C2"))
同样,这是为了模拟目的。现在,有了MvcMailer我不能做同样的事情,并且整个周末一直在努力弄清楚如何让它发挥作用。我研究过的所有东西都没用。我确信这是一件我忽略的事情。
MvcMailer的视图不使用控制器。它使用了一个类(在我的例子中为QuoteMailer
)。以下是我的向导传递给MvcMailer的方式:
public ActionResult Submitted()
{
QuoteMailer.EMailQuote(quoteData).Send();
return View(quoteData);
}
EMailQuote
中的QuoteMailer
:
public virtual MailMessage EMailQuote(QuoteData model)
{
var mailMessage = new MailMessage { Subject = "..." };
mailMessage.To.Add(model.Step.EMail);
mailMessage.To.Add("web@site.com");
ViewData = new ViewDataDictionary(model);
PopulateBody(mailMessage, viewName: "EMailQuote");
return mailMessage;
}
感谢任何帮助(如何在此处传递计算,而在模拟场景中我使用ViewBag
?)
答案 0 :(得分:1)
MVCMailer Mailers扩展了ControllerBase,因此在一天结束时它们的工作方式与控制器完全相同。您应该能够以与常规控制器相同的方式将数据发送到Mailer视图。 Here是一个链接,描述了您可以将数据发送到Mailer View的所有方式。在您的情况下,您可以执行以下操作以使用强类型模型,只要View期望QuoteData类型的模型:
public virtual MailMessage EMailQuote(QuoteData model)
{
var mailMessage = new MailMessage { Subject = "..." };
mailMessage.To.Add(model.Step.EMail);
mailMessage.To.Add("web@site.com");
ViewData.Model = model;
PopulateBody(mailMessage, viewName: "EMailQuote");
return mailMessage;
}