我有一个后台服务运行,它向我的网站用户发送电子邮件.我想将电子邮件模板编写为MVC视图,以保持一致(以便可以使用相同的模型发送电子邮件以显示网页).
不幸的是,当我尝试执行LoadControl(只是修补到BuildManager.CreateInstanceFromVirtualPath)时,我得到以下内容:
System.NullReferenceException at
System.Web.dll!System.Web.VirtualPath.GetCacheKey() + 0x26 bytes
System.Web.dll!System.Web.Compilation.BuildManager.GetCacheKeyFromVirtualPath + 0x2a bytes
System.Web.dll!System.Web.Compilation.BuildManager.GetVPathBuildResultFromCacheInternal + 0x30 bytes
Run Code Online (Sandbox Code Playgroud)
似乎如果我将MvcBuildViews设置为true,那么应该有一些简单的方法来使用编译的视图来构建电子邮件模板,但我无法弄清楚如何.
我从Rick Strahl找到了以下博客,可能会有这样的技巧:http: //www.west-wind.com/presentations/aspnetruntime/aspnetruntime.asp
但是,它似乎启动了一个完整的ASP.NET服务器来处理请求.
有没有一种简单的方法来加载MVC视图并渲染它?或者是Rick Strahl建议的加载ASP.NET运行时的唯一方法?
我正在做一些db linq对象的序列化,它包含EntitySet和EntityRef类.
我找到了一种非常简单的方法来处理这些类的序列化,只需使用ISerializable来正确处理这种类型的成员(将它们转换为序列化列表,并在反序列化时撤消它).
但是,如果我能这样做,那将是非常好的:
[Serializable]
[SerializeLinqEntities]
partial class Person
{ ... }
Run Code Online (Sandbox Code Playgroud)
代替:
partial class Person : ISerializable
{
public virtual void GetObjectData( SerializationInfo si, StreamingContext ctxt )
{
EntitySerializer.Serialize(this, typeof(Person), si, ctxt);
}
protected Person( SerializationInfo si, StreamingContext ctxt )
{
EntitySerializer.Deerialize(this, typeof(Person), si, ctxt);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?我查看了序列化类,似乎无法找到任何方法来设置自定义序列化过滤器例程(我可以在其中查找我的自定义属性).
谢谢!