這是我自己的建議。如果你使用的是MVC,爲你的電子郵件創建一個獨立的視圖(比如myemail.cs)併爲它分配一個模型(myemailModel)。
這是你的myemailModel類
public class myemailModel {
public string Username{get;set;}
public IList<Data> data{get;set;}
public class Data{
public string Name{get;set;}
public int Age{get;set;}
}
}
所以,你的看法是這樣的:
@model myemailModel
<html>
<body>
Hello @Model.Email!
@if (Model.data !=null && Model.data.count() >0)
{
<table class="tblCss">
<tr>
<th> Name </th>
<th> Age </th>
</tr>
foreach (var i in Model.data)
{
<tr>
<td>@i.Name</td>
<td>@i.Age</td>
</tr>
}
</table>
}
</body>
</html>
最後,你需要渲染視圖轉換爲字符串。使用下面的方法(Render a view as a string):
public 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();
}
}
,並調用上面的方法來獲得身體:
string body = RenderRazorViewToString("myemail", new myemailModel {
Username="foo",
data = new List<myemailModel>{
// fill it
}
});
你是不是做錯了。但是您的示例HTML – NicoRiff
上沒有{用戶名}這看起來像是在嘗試構建自己的html視圖渲染引擎。你能改變模板或代碼嗎? – Tim
你能改變模板嗎?它只是名字和年齡?你在哪裏存儲行的值?你試過什麼了? – xszaboj