2017-07-04 79 views
0

我需要以html格式創建電子郵件的主體。在HistoryController中,我定義了一個metod,它返回一個對象(Course),這些屬性將用於打包正文,正如我所說的那樣。我不知道如何獲得視圖中的對象。我已經看到了使用ActionResult的metod,但我不提供它只是像創建電子郵件的輔助工作。從控制器中獲取對象MVC

我明白了。

HistoryController

public static CURSO courseSelected = new CURSO(); 
public static CURSO courseSel() 
{ 
    courseSelected.Name = "Physics"; 
    return courseSelected;//cursoSelected del tipo CURSO 
} 

查看

@model Project.Models.Course 
@{ 
    var courseSel = Project.Models.HistoryController.courseSel(); 
} 
<fieldset class="fHorizontalCenter"> 
     <label style="font-size:18px">Welcome to course of </label><label>@courseSel.Name</label>< br /> 
</fieldset> 

,但我不能使用去變量的數據,它總是打印此

歡迎@courseSel當然。名稱

+1

你如何訪問該視圖? –

+0

以及爲什麼模型命名空間中的控制器? –

+0

您查看有.cshtml擴展名?視圖中的所有標記是正確打開和關閉的? –

回答

0

比方說,你有一個模型,看起來像這樣:

namespace Project.Models 
{ 
    public class Course 
    { 
     public string CourseName { get; set; } 
    } 
} 

和在你的瀏覽名爲「CourseEmailTemplate.cshtml」視圖/共享文件夾:

@model Project.Models.Course 
@{ 
    Layout = null; 
} 

<fieldset class="fHorizontalCenter"> 
    <label style="font-size:18px">Welcome to course of </label><label>@Model.CourseName</label>< br /> 
</fieldset> 

則控制器可以看看是這樣的:

public class HistoryController : Controller 
{ 
    public ActionResult Index(/*put whatever parameters in here*/) 
    { 
     // Fetch your model 
     // just example data 
     var course = new Course { CourseName = "your coursename" }; 

     var html = GetEmailText(course); 

     // send your email 

     return View(); // or redirect to action 
    } 

    private string GetEmailText(Course course) 
    { 
     return RenderRazorViewToString("CourseEmailTemplate", course); 
    } 

    private string RenderRazorViewToString(string viewName, object model) 
    { 
     ViewData.Model = model; 
     using (var sw = new StringWriter()) 
     { 
      var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, 
                    viewName); 
      var viewContext = new ViewContext(ControllerContext, viewResult.View, 
             ViewData, TempData, sw); 
      viewResult.View.Render(viewContext, sw); 
      viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View); 
      return sw.GetStringBuilder().ToString(); 
     } 
    } 
} 

Render a view as a string

偷一些代碼
相關問題