2014-02-20 2 views
1

Я сталкиваюсь с проблемами, проходящими строго типизированную модель в MvcMailer. Я использую asp.net mvc3 и установил MvcMailer3 с помощью nuget.Сильно типизированная модель с 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(); 
    } 

View Code

@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. 

ответ

1

привет, я только что получил понимание, чтобы ответить на мой собственный вопрос.

Фактически, когда я использовал ViewData.Model внутри контроллера «SendEmail», модель доступна для собственного просмотра, а именно «Index» вместо вида бритвы, используемого с контроллером «UserMailer», который называется «Welcome» в моем случае.

Чтобы передать модель в "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. 
Смежные вопросы