我创建了一个MVC 4应用程序。在那里,我有一些观点。这些视图中的每一个都可以在浏览器中显示,也可以作为电子邮件的正文。
作为电子邮件的正文是主要目的,但我添加了一个链接以在浏览器中显示正文。
我有一个网络服务电话,"浏览"到页面并获取其来源并将其作为HTML应用于电子邮件正文中,然后我使用System.Net.Mail。
现在,在WebService调用中,我需要访问所服务页面的Model的某些值。这甚至可能吗?我是以完全错误的方式做的吗?你有什么建议吗?
页面和WebService都在同一个项目下。
更新 我的实际问题是如何处理图像。我想嵌入它们(用于电子邮件)或提供链接(用于浏览器)。所以我的模型将图像放在\
中list<System.IO.Stream>
视图呈现部分html,如下所示:
@model MyProject.Models.ImageTag
@if (@Model.ContentType == 2)
{
<img src="cid:@Model.ImageReference"border="0" alt="" />
}
else
{
<img src="http://www.mysite.com/images/@Model.PropertyId/@Model.Photo" border="0" alt="" />
}
网络服务需要知道&#34;这些图像是为了在LinkedResources中添加它们:
foreach (MyProject.Models.Images image in Model.Images)
{
LinkedResource lr = new LinkedResource(image.image, "image/jpeg");
lr.ContentId = image.Name;
lr.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
lrc.Add(lr);
}
由于没有模型,上述工作当然不会成功。所以这是我的问题。
Model.Images是
List<Img>
img是
public class Img
{
public string Name { get; set; }
public System.IO.Stream image {get;set;}
}
答案 0 :(得分:0)
所以你的服务从MVC View下载HTML,你想在该响应中放入一个有意义的字段吗?
您可以使用一些选项,例如:
但似乎你想让HTML页面做得太多。如果该视图的唯一目的是呈现电子邮件正文,那就让它做到这一点。也许创建另一个服务方法或JSON结构,它为您提供所需的值,和呈现邮件模板的相应URL。
答案 1 :(得分:0)
是的,我会说你做错了。视图的目的是将模型的数据呈现为您需要的任何表示形式:电子邮件消息的内容,格式化的单独值。作为json或纯文本,或两者兼而有之。
有几种方法可以从同一视图中返回不同类型的信息:
以某种方式在HTML中添加数据并不是一个好主意。除非您希望收件人也接收数据,否则您必须在发送电子邮件之前将其从返回的HTML中删除。
如果我只想返回2-3个不需要复杂处理的小值,我会从第4个选项开始,否则我会创建两个单独的视图。
如果不同场景需要这些值,即不准备电子邮件,我肯定会创建一个不同的视图和一个只返回我需要的值的模型。