【发布时间】:2015-03-21 12:38:53
【问题描述】:
我在 MVC 中看到了很多关于如何将视图呈现为字符串的示例,但如果我的视图有任何参数,我无法让它工作。
例如我写了一封邮件订阅邮件作为视图,我想以mailID作为参数调用视图来获取订阅者详细信息以发送个性化邮件。
假设我有一个名为 Email 的控制器和一个名为 SubscribeMail 的视图,其中有一个名为 mid
的参数我正在使用以下功能发送电子邮件。不幸的是,它永远不会收到邮件 ID,并且在调试模式下永远不会在视图中遇到断点(假设基于过去的参数它永远不会点击我编写的视图),但发送的电子邮件仍然会在视图内发送 html,只是永远不会收到根据参数传入viewbag的个性化数据。
这是我目前拥有的功能:
public static string RenderViewToString(string controllerName, string viewName, object viewData)
{
var context = HttpContext.Current;
var contextBase = new HttpContextWrapper(context);
var routeData = new RouteData();
routeData.Values.Add("controller", controllerName);
var controllerContext = new ControllerContext(contextBase,
routeData,
new EmptyController());
var razorViewEngine = new RazorViewEngine();
var razorViewResult = razorViewEngine.FindView(controllerContext,
viewName,
"",
false);
var writer = new StringWriter();
var viewContext = new ViewContext(controllerContext,
razorViewResult.View,
new ViewDataDictionary(viewData),
new TempDataDictionary(),
writer);
razorViewResult.View.Render(viewContext, writer);
return writer.ToString();
}
我打电话给谁:
RenderViewToString("Email","MailSubscribe",new KeyValuePair<string,int>("mid",newSubscription.MailID))
这是我试图点击的控制器视图(尽管调试从未到达它):
public ActionResult MailSubscribe(int mailId)
{
using (var context = new MyEntities())
{
subMail result = context.subMails.FirstOrDefault(x => x.MailID == mailId);
if (result != null)
{
ViewBag.Name = result.FirstName;
}
}
return View();
}
知道如何在电子邮件/邮件订阅视图被击中时改进这一点,但不是通过我制作的方法。
【问题讨论】:
-
Render a view as a string 的可能重复项
-
不是重复的,我的区别是添加参数。请阅读一个问题,而不是不看半天就试图标记它。虽然我们很欣赏这里垃圾问题的清理,但我们仍然要求您首先尊重每个问题。
标签: c# asp.net asp.net-mvc