MVC 5 Razor视图在if条件中不呈现HTML

3
这是MVC 5 Razor视图代码:ForestView.cshtml。
@model Forest.Tree
@{
   var resultHtml = string.Empty;
 }
<div id="divTreeSearch>
@(Html.Kendo().PanelBar().
                         Name("panelbar")
                         .Items(panelbar =>
                                        {panelbar.Add()                                                   
                               .Content(@<text>@Html.Partial("_TreeSearch", Model, ViewData)</text>);}))
</div>
<div id="divTreeSearchResult">
@if(Model.TreeResultObj != null)
{
  resultHtml = Html.ContentFromPartial("_TreeReport", Model.TreeResultObj);

  @Html.Raw(resultHtml);    -- Not working
  @Html.Raw(HttpUtility.HtmlDecode(resultHtml)); -- Not Working
  Html.Raw(resultHtml);    -- Not working
  Html.Raw(HttpUtility.HtmlDecode(resultHtml)); -- Not Working

  Model.resultStringSaved  = resultHtml;
  @Html.DisplayText("resultStringSaved"); -- Not Working

   @Html.Raw("<text>Test</text>") -- Even this is not working

}

 @Html.Raw(Model.resultStringSaved) -- Not Working
 @Html.Raw(HttpUtility.HtmlDecode(Model.resultStringSaved)) -- Not Working
 @Html.DisplayText("resultStringSaved") -- Not Working

  @Html.Raw("<text>Test</text>") -- This is Working
</div>

ForestView.cshtml - @model Forest.Tree _TreeSearch.cshtml - @model Forest.Tree _TreeReport.cshtml - @model Forest.SearchData.Results

在模型Forest.Tree中,属性TreeResultObj的类型为Forest.SearchData.Results

ForestView.cshtml是主视图,最初加载并显示来自_TreeSearch部分的搜索输入。 当输入搜索条件并单击“搜索”按钮时(所有这些都来自_TreeSearch),会进行ajax调用,并调用TreeSearch(id tree)操作。

该操作再次返回主要的“ForestView”,但现在模型属性'TreeResultObj'已经被填充。因此,在'ForestView'中的'if条件'中执行的代码将调用另一个部分以HTML字符串的形式返回内容,该内容保存在“resultHtml”变量中。

此时,我可以看到类似于"<Text>blah blah blah</text>"的HTML字符串。 但是,尝试在主要的“ForestView”搜索面板下方显示HTML字符串不起作用-我几乎尝试了每种可能的方式。

在if条件内的任何文本都不会呈现-它是一个ajax调用,因此没有页面刷新-我可以看到HTML字符串值,并且还可以将其保存为模型属性,但无法在主视图中显示它。 任何帮助将不胜感激。提前致谢。


@Dobbins,他们在问题中显然已经尝试过了。 - Marc Gravell
我的意思是 TreeResultObjnull - user3559349
你在视图中设置了断点,并尝试查看TreeResultObj的值了吗? - TheGeekYouNeed
你能提供一个 MCVE 吗?(http://stackoverflow.com/help/mcve) - jamesSampica
嘿,我也遇到了同样的问题,尝试生成链接(<a>元素),但是Html.Raw无法正确地渲染链接。你找到解决方法了吗? - boggy
显示剩余3条评论
4个回答

2

在那个时候,你只是调用了一个方法并忽略了结果。尝试这样:

@: @Html.Raw(resultHtml)

@:开关用于输出模式。注意:如果您使用的是明显的标记语言,它会自动切换。例如:

<div>@Html.Raw(resultHtml)</div>

它不起作用,Marc... HTML字符串很好 - 但是当我查看页面源代码时,我可以看到div 'divTreeSearchResult',但它是空的... HTML字符串中有<Script>部分和其中的JavaScript函数...这可能是原因吗? - saklo
我甚至无法显示类似这样的内容:@: @Html.Raw("<strong>ResultTest</strong>") - saklo

0

我之前也遇到了同样的问题,但最终解决了。我想在 for 循环中打开一个 div 并有条件地结束它。

在 @Html.Raw 前面放置任何虚拟 HTML 元素即可。

<div id="divTreeSearchResult">
@if(Model.TreeResultObj != null)
 {
  resultHtml = Html.ContentFromPartial("_TreeReport", Model.TreeResultObj);
  <span>dummySpan</span>
  @Html.Raw(resultHtml);    
  @Html.Raw(HttpUtility.HtmlDecode(resultHtml)); 
  @Html.Raw(resultHtml);   
  @Html.Raw(HttpUtility.HtmlDecode(resultHtml)); 

 Model.resultStringSaved  = resultHtml;
 @Html.DisplayText("resultStringSaved"); 

 @Html.Raw("<text>Test</text>") 

}

@Html.Raw(Model.resultStringSaved) 
@Html.Raw(HttpUtility.HtmlDecode(Model.resultStringSaved)) 
@Html.DisplayText("resultStringSaved") 

@Html.Raw("<text>Test</text>") 
</div>

在那里放置一个虚拟的 HTML 元素后,下面的所有 @Html.Raw 将起作用。

编码愉快

Tarak


-1

1 - render 方法中的内容可能违反 HTML 语法,而 Razor 通常不会呈现错误的 HTML 内容。 2 - 将 HTML.Raw(resultHtml) 包含在 dev 中。


它已经被包含在<div>标签中了。我也检查了源HTML,看起来很好... <div id="divTreeSearchResult"> </div>是存在的,但是它是空的。谢谢。 - saklo

-1
经过一整天的无数次测试: 更改使用:
@Html.Raw(Html.DisplayFor(modelItem => item.Mensagem)) 

作者:

@Html.Raw(Html.DisplayTextFor(modelItem => item.Mensagem))

您将获得已呈现的HTML,不包含任何<>!!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接