0

私は 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ですか?)

4

1 に答える 1

1

MVCMailer メーラーは ControllerBase を拡張するため、最終的にはコントローラーとまったく同じように機能します。通常のコントローラーと同じ方法で、メーラー ビューにデータを送信できるはずです。 これは、 Mailer 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 に答える