首先,創建如下一個控制器擴展方法ViewToString
:
這將延長System.Web.Mvc.Controller有一個新的方法叫做ViewToString
它會使你的意見HTML成StringReader
namespace YourProject.ControllerExtensions
{
using System;
using System.IO;
using System.Web.Mvc;
public static class ControllerExtend
{
public static StringReader ViewToString(this Controller controller, string viewName, object model)
{
#region MyRegion
ControllerContext context = controller.ControllerContext;
if (context == null)
{
throw new ArgumentNullException("context");
}
if (model != null)
{
controller.ViewData.Model = model;
}
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(context, viewName);
var viewContext = new ViewContext(context, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(context, viewResult.View);
//return sw.GetStringBuilder().ToString();
return new StringReader(sw.ToString());
}
#endregion
}
}
}
現在,撥打上面的方法在你的控制器動作來訪問你的意見HTML,並通過Your View Name
和Your Model Name
(如果您沒有模型,傳遞null):
public ActionResult YourControllerAction()
{
//....
StringReader htmlView = this.ViewToString("YourViewName", YourModelObject);
//Now htmlView containing the HTML of Your View
//and you can pass it to your Email function .....
// ...
}
htmlView將包含從您的視圖中的HTML ...
希望這會有所幫助...
你能提供更多關於你想要做什麼的信息嗎?如果你想從控制器編輯一個元素的值..使它成爲模型屬性並使用'@ Html.HiddenFor(x => x.Property)'... –
我需要頁面的html來創建一個完整的電子郵件附件。問題是我將如何設置模態屬性。 – fireholster
你的問題是非常不清楚的..請編輯它,以更好地解釋你正在努力實現的目標 –