0

我正在使用 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);
}

这是EMailQuoteQuoteMailer

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?)

4

1 回答 1

1

MVCMailer Mailers 扩展了 ControllerBase,因此最终它们的工作方式与控制器完全一样。您应该能够像在常规控制器中一样将数据发送到 Mailer 视图。 是一个链接,描述了您可以将数据发送到 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;
}
于 2012-07-30T15:14:46.917 回答