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

时间:2016-12-20 21:52:29

标签: c# html asp.net-mvc razor asp.net-mvc-5

这是MVC 5剃刀视图代码: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调用为make,TreeSearch(id tree)操作被调用

该操作再次返回主“ForestView” - 但是现在填充了模型属性“TreeResultObj”。所以'ForestView'中'if conditon'中的代码执行并调用另一个partial来将内容作为HTML字符串返回,该字符串保存在'resultHtml'变量中

此时我可以看到像"<Text>blah blah blah</text>"这样的Html Sting 然而,尝试在主“ForestView”中的搜索面板下方显示HTML字符串是行不通的 - 我几乎尝试了所有方法。

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

4 个答案:

答案 0 :(得分:1)

此时,您只是调用方法并忽略结果。尝试:

@: @Html.Raw(resultHtml)

@:切换到输出模式。注意:如果您使用了明显标记的内容,它将自动切换。例如:

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

答案 1 :(得分:0)

我也遇到了同样的问题,但我可以让它发挥作用。我想打开一个div开始并有条件地在for循环中结束它。

在@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都可以工作

快乐编码

塔拉克

答案 2 :(得分:-1)

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

答案 3 :(得分:-1)

在一整天的数万次测试中: 改变使用:

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

由:

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

您将获得带有任何&lt;&gt; !!!

的呈现HTML