mvc razor,在数据库存储的html中带有@html.actionurl

mvc razor,在数据库存储的html中带有@html.actionurl,html,asp.net-mvc,entity-framework,razor,Html,Asp.net Mvc,Entity Framework,Razor,我已经闲逛了很长一段时间,还没有找到我需要的东西。这是我们的设想 我们有一个带Razor的MVC4应用程序。在一个屏幕上,我们使用Telerik编辑器控件保存文本和图像。它们被格式化为HTML并存储在数据库中。图像存储为byte[]数据,html src“path”用不同的文件名更新 稍后,一个用户来查看数据。因为任何图像都存储在数据库中,所以我想我可以使用这里的示例,用带有Url.Action的标记更新HTML中的标记,然后将所有HTML呈现到屏幕上 下面是在替换图像标记后动态生成的html代

我已经闲逛了很长一段时间,还没有找到我需要的东西。这是我们的设想

我们有一个带Razor的MVC4应用程序。在一个屏幕上,我们使用Telerik编辑器控件保存文本和图像。它们被格式化为HTML并存储在数据库中。图像存储为byte[]数据,html src“path”用不同的文件名更新

稍后,一个用户来查看数据。因为任何图像都存储在数据库中,所以我想我可以使用这里的示例,用带有Url.Action的标记更新HTML中的标记,然后将所有HTML呈现到屏幕上

下面是在替换图像标记后动态生成的html代码的示例

<p>testing the image blah</p><p><img src="@Url.Action("getImg", "Responses", new { id = 1 }) " alt="Response Image" /> </p>
Text存储Telerik编辑器中的HTML。我使用HTMLAgilitypack循环浏览HTML中的所有图像,并从这些图像创建ResponseImage记录,ResponseImage.FilePath是我使用的返回到Response.Text中存储的HTML代码的链接(所有图像都用不同的名称/路径更新)

在my Details.cshtml屏幕上,我想查看Response.Text的详细信息。 从数据库中,我的响应。文本如下所示:

<p>hjjk</p><p>
<img alt="" height="144" src="/Content/Editor_Images/UserFiles/JKULBIDA/Images/Koala_635019802303066655.jpg" width="164"></p>
hjk

但是,因为我将图像存储在数据库中,而不是文件系统中,所以我再次使用HTMLAgility pack,并使用@Url.Action的Razor语法更新所有图像标记。我的新HTML如下所示

<p>hjjk</p><p><img src="@Url.Action("getImg", "Responses", new { id = 4 }) " alt="Response Image" /> </p>
hjk

最后,在我的视图中,我想显示我的数据,但也要正确格式化HTML。所以我调用@Html.Raw(Model.Text),我的图像标记不起作用:(

*****更新结束****


提前感谢,因为我对此非常感兴趣。

不确定如何存储数据,但假设您的数据中有ID和文本,而不是构建一个包含Razor语法的字符串,您的视图应该包含所有必要的标记,并使用包含数据的变量

例如,如果您有一个局部视图,其中您的模型是具有属性Id和描述的图像,则您的局部视图如下所示:

<img src="@Url.Action("getImg", "Responses", new { id = Model.ID })"
    alt="@Model.Description">
这将根据代码中的这些参数构建MVC URL,这样您就可以直接将其转储到
src
属性中。如果您处理的是奇怪的路由或类似的问题,您可能需要对其进行一些调整,但我认为这应该适用于基本设置


如果你在控制器内部,我相信你可以做
ControllerContext.RequestContext
,或者甚至可以只做
ControllerContext
,而不是获取静态的当前控件。

谢谢你的回复。我在整个过程中添加了一些更多的信息。我只是想知道,即使你建议使用局部视图来重新设置在我的图像标签下,我是否仍然会在试图从Html.Raw内部调用@Html.Partial时遇到同样的问题?或者最终是否有更好的方法来呈现Html/Razor混合包?Partial视图只是为了让您可以将图像对象作为模型,但您可以在主视图中对属性或变量执行相同的操作。我不知道知道HTMLAgility是如何工作的,所以我也无能为力——但根据您所做的,您正在将字符串传递到
Html.Raw
,因此,即使它看起来像剃须刀,它也被视为常规文本,而不是执行。请看我的编辑-现在我看到了您所做的,我可能会有一个更好的答案。当然,这现在是有意义的:)尝试过了,效果很好,只需替换src值而不是整个img标记,我就可以保留对HTML所做的任何格式和大小调整。黄金!我还是MVC的新手,所以路由甚至没有出现在我的雷达上,但现在是:)非常感谢!很酷,很高兴它成功了。你可以用ASP.NET MVC做各种很棒的事情——我尽可能地让它简单,但偶尔,你需要做一些疯狂的事情,而且总是有答案的。
<p>hjjk</p><p><img src="@Url.Action("getImg", "Responses", new { id = 4 }) " alt="Response Image" /> </p>
<img src="@Url.Action("getImg", "Responses", new { id = Model.ID })"
    alt="@Model.Description">
string imageUrl = RouteTable.Routes.GetVirtualPath(
    System.Web.HttpContext.Current.Request.RequestContext,
    new RouteValueDictionary(new { 
        controller = "Responses", 
        action = "getImg",
        id = Model.ID
    })).VirtualPath;