Sto visualizzando PartialViews/Modelli con il metodo seguente al fine di inviare e-mail modello che vengono inviate.ControllerContext e ViewData Ambito di applicazione esterno del controller - MVC3 C#
Sto usando il codice qui sotto per convertire il partial e il modello in una stringa html che posso passare al mio codice di invio email.
public class BaseController : Controller
{
public string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
throw new ArgumentException("No View Path Provided.");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
}
Attualmente, questo vive nella BaseController, vorrei spostarlo fuori in un metodo di supporto in modo che possa passare il mio modello e-mail la costruzione di fuori/invio del controller troppo.
Il problema è che non ho accesso al Viewdata/TempData/ControllerContext
posso nuovo un ControllerContext ma non so cosa fare Viewdata/TempData.
Questo è come vorrei usare quello che ho in controller attualmente:
//Do Stuff in Controller
var html = RenderPartialViewToString("~/Views/Mail/_ForgotPassword.cshtml", new MailModel { Username = "Skrillex", SomethingElse = "foo" });
//Send the Email
Si sta utilizzando tempdata/viewdata nel rendering della vista ? Se no, perché non passare quelli vuoti? – Aliostad
Sto utilizzando ViewData per impostare il modello. – Jason
Quindi, perché non è una visualizzazione fortemente tipizzata? Hai dovuto usare la vista allentata? – Aliostad