私は MvcMailer を使用しており、計算値を渡そうとしています。これらの値は、ユーザーがウィザード フォーム (テキスト ボックス、ラジオ ボタン リストなど) に情報を入力した後に計算されます。長くなって申し訳ありませんが、「もっとコードを見せて」というコメントを避けるために、できるだけ多くのコンテキストを提供したいと思います。ビュー モデル ( QuoteData
) を使用しています。私の「価格」はモデル ( PriceQuote
) に保持されます。
my の計算例 (および付随する「合計」コード) を次に示します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;
}
私のView Modelは次のようなものです(これが正しいかどうか、またはここで計算を行う必要があるかどうかはわかりません):
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
ですか?)