No sé si me estoy explicando esto correctamente, o si la solución es bastante simple, así que aquí va:MvcMailer: Tomar la entrada del usuario a la vista a través del modelo y luego insertarlo en el correo
estoy usando MvcMailer , pero antes configuré un formulario de entrada de asistente al que llamo Quote.cshtml. Detrás de Quote.cshtml, configuré un modelo llamado QuoteModel.cs.
Quote.cshtml en su forma más básica (estoy dejando salir toda la lógica asistente y mostrando sólo una entrada):
<td width="40%">
@Html.LabelFor(m => m.FirstName, new { @class = "mylabelstyle", title = "Enter first name." })
</td>
<td width="60%">
@Html.TextBoxFor(m => m.FirstName)
@Html.ValidationMessageFor(m => m.FirstName)
</td>
QuoteModel.cs (de nuevo, sólo mostrando la entrada; NB: el uso la DataAnnotationExtensions)
public class QuoteModel
{
[Required(ErrorMessage = "First Name required.")]
[Display(Name = "First Name:")]
public string FirstName { get; set; }
}
Ahora estoy tratando de integrar MvcMailer, que establece IQuoteMailer.cs, QuoteMailer.cs, _Layout.cshtml y QuoteMail.cshtml. QuoteMail.cshtml es lo que verá el destinatario del correo. También configuré un QuoteController.cs, en el cual coloqué el código apropiado requerido por MvcMailer. Está en QuoteMailer.cs y QuoteController.cs donde tengo problemas para pasar la entrada del usuario de Quote.cshtml (que se basa en el modelo de QuoteModel.cs).
IQuoteMailer.cs:
public interface IQuoteMailer
{
MailMessage QuoteMail();
}
QuoteMailer.cs:
public class QuoteMailer : MailerBase, IQuoteMailer
{
public QuoteMailer():
base()
{
MasterName="_Layout";
}
public virtual MailMessage QuoteMail()
{
var mailMessage = new MailMessage{Subject = "QuoteMail"};
mailMessage.To.Add("[email protected]");
ViewBag.Data = someObject;
//I imagine this is where I can pass my model,
//but I am not sure (do I have to iterate each and
//every input (there are like 20 in QuoteModel.cs)?
return mailMessage;
}
QuoteMail.cshtml (_Layout.cshtml es bastante estándar, por lo que no se muestra aquí):
@*HTML View for QuoteMailer#QuoteMail*@
Welcome to MvcMailer and enjoy your time!<br />
<div class="mailer_entry">
<div class="mailer_entry_box">
<div class="mailer_entry_text">
<h2>
INSERT_TITLE
</h2>
<p>
INSERT_CONTENT
//I believe I am going to use a "@" command like @ViewData
//to pass FirstName, but again, not sure how to bind
//the model and then pass it.
</p>
<p>
INSERT_CONTENT
</p>
</div>
</div>
</div>
Y, por último, las partes relevantes de QuoteController.cs (tenga en cuenta que estoy usando un asistente, por lo tanto, parte de mi problema es averiguar dónde colocar el código MvcMailer, pero creo que la tengan derecho):
QuoteController clase pública: Controlador {
/// <summary>
/// MvcMailer
/// </summary>
private IQuoteMailer _quoteMailer = new QuoteMailer();
public IQuoteMailer QuoteMailer
{
get { return _quoteMailer; }
set { _quoteMailer = value; }
}
//
// GET: /Quote/
[HttpGet]
public ActionResult Quote()
{
HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;
//In order to get the clientside validation (unobtrusive),
//the above lines are necessary (where action takes place)
return View();
}
//
// POST: /Matrimonial/
[HttpPost]
public ActionResult Quote(QuoteModel FinishedQuote)
{
if (ModelState.IsValid)
{
QuoteMailer.QuoteMail().Send();
return View("QuoteMailSuccess", FinishedQuote);
}
else return View();
}
//
// POST: /Matrimonial/Confirm
[HttpPost]
public ActionResult QuoteMailConfirm(QuoteModel FinishedQuote)
{
return PartialView(FinishedQuote);
}
}
Por lo tanto, mi confusión es cómo para aprobar el QuoteModel que creé, de modo que, en última instancia, pueda tomar los datos inputados del usuario y luego generar la vista de MvcMailer.
Aprecio la ayuda de las comunidades.
Out and about. Gracias por responder.Verificará más tarde e informará el progreso. – REMESQ
Esto funcionó muy bien. ¡Gracias! Marcado apropiadamente. – REMESQ
Esto funcionó muy bien, pero realmente esperaba que la función PopulateBody tuviera un parámetro de modelo. Creo que puedo agregar un método de extensión con la suficiente facilidad. –