【问题标题】:Render HTML inside part of view without effect other tags在视图的一部分内渲染 HTML 而不影响其他标签
【发布时间】:2019-02-10 14:09:56
【问题描述】:

我只想在视图中呈现电子邮件的正文部分,我的问题是电子邮件正文的样式何时影响我页面的其他 html 部分。

    <div class="col-md-12 m-b-5">
        <div id="email" dir="ltr">
            @Html.Raw(ViewBag.Body)
        </div>
    </div>

我不知道在电子邮件 div 中呈现的是什么,我希望这上面的所有内容都只呈现在这个 div 中而不影响页面的其他部分。

【问题讨论】:

  • 它不会影响您页面上的其他元素
  • 取决于@Html.Raw(ViewBag.Body)的内容
  • @StephenMuecke 不幸的是它会影响其他元素并改变其他样式!我们不知道 ViewBag.Body 会在页面上呈现什么
  • 有什么影响? ViewBag.Body 中可能包含的任何内联样式都不会影响其他元素
  • @StephenMuecke 电子邮件正文中的 Html 样式不是内联的。这不是法律,但有时会发生!我有这个案例要问这个问题

标签: html css asp.net-mvc user-interface mailkit


【解决方案1】:

您可以在为 Outlook 插件设置 Viewbag.body 之前删除所有无效内容,我使用此代码过滤掉一些生成的内容。我遇到的问题是嵌入图像,所以我使用正则表达式将它们过滤掉。也许你可以做类似的事情?

            var reg = new Regex("<img[^>]+['\"][^>]*>");
            var matches = reg.Matches(message.Body);
            foreach (var match in matches)
            {
                body = body.Replace(match.ToString(), "");
            }

编辑

当您查看电子邮件的来源(outlook html 格式的电子邮件)时,您会看到在邮件开头定义的许多 CSS 类和规则。实际的邮件以正文标记(屏幕)开头。所以你可以抓住body标签内的数据并显示它

【讨论】:

  • 如何检测无效内容?我不知道电子邮件中会写什么。我只想在电子邮件 div 中呈现该标签,就像 iframe 一样
  • 但是我要渲染样式!仅为电子邮件正文呈现样式。是否有任何 html 属性或其他强制样式将仅在电子邮件 div 内呈现。我说的是 iframe 之类的东西
猜你喜欢
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 2018-05-19
  • 1970-01-01
相关资源
最近更新 更多