2

我创建了一个 MVC 4 应用程序。在那里我有一些意见。这些视图中的每一个都用于在浏览器中显示或作为电子邮件的正文。

作为电子邮件的正文是主要目的,但我添加了一个链接以在浏览器中显示正文。

我有一个“浏览”页面并获取其源并将其作为 HTML 应用到电子邮件正文中的 Web 服务调用,然后我使用 System.Net.Mail。

现在,在 WebService 调用中,我需要访问所服务页面的模型的一些值。这甚至可能吗?我这样做是完全错误的吗?你有什么建议吗?

页面和 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="" />
}

Web 服务需要“知道”图像才能将它们添加到 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;}
}
4

2 回答 2

0

因此,您的服务从 MVC 视图下载 HTML,并且您想在该响应中放置一个有意义的字段?

您可以使用一些选项,例如:

  • 发送包含该值的 HTTP 标头
  • 将值放入您使用 HtmlAgilityPack 提取的 HTML 元素中
  • 以包含您的值的第一行开始 HTML,然后是 HTML 的其余部分

但似乎你想让 HTML 页面做的太多了。如果该视图的唯一目的是呈现电子邮件正文,那就让它这样做吧。或许创建另一个服务方法或 JSON 结构,为您提供您正在寻找的值,以及呈现邮件模板的相应 URL。

于 2013-08-22T07:52:32.883 回答
0

是的,我会说你做错了。该视图的目的是将模型的数据呈现为您需要的任何表示形式:电子邮件的内容、格式化的单独值,例如。作为 json 或纯文本,或两者兼而有之。

从同一视图返回不同类型的信息有多种选择:

  • 您可以返回一个多部分的 HTTP 响应,这在客户端处理起来有点棘手,但是您可以通过相同的调用获得两种类型的内容
  • 如果存在可选的查询参数,而不是 HTML 视图,您可以将值返回为例如 Json。您需要两个单独的调用来返回两个响应。
  • 您可以创建一个单独的视图来返回额外的数据
  • 您可以将额外数据作为 HTTP 标头返回

不知何故,在 HTML 中添加数据并不是一个好主意。除非您希望收件人也接收数据,否则您必须在发送电子邮件之前将其从返回的 HTML 中删除。

如果我只想返回 2-3 个不需要复杂处理的小值,我将从第 4 个选项开始,否则我将创建两个单独的视图。

如果不同场景需要这些值,即不用于准备电子邮件,我肯定会创建一个不同的视图和一个只返回我需要的值的模型。

于 2013-08-22T07:52:45.803 回答