2013-05-03 43 views
1

我有两个控制器操作,目标是相同的视图。也就是说,我在从控制器操作的视图调用中指定了一个视图名称。第二个动作在ViewBag中放入一个html字符串。我只是想在视图中显示这个html字符串。我曾尝试呈现一个html字符串来查看

@ViewBag.HtmlDoc 

@Html.Raw(ViewBag.HtmlDoc) 

,但没有被渲染。

任何帮助,将不胜感激。提前致谢。

--controller代码---

public ActionResult ShowReport(string URL) 
     { 
      string tableString = ""; 

      [Code to Create table called ReportTable and add rows etc] 

      tableString = RenderControlToString(ReportTable); 

      ViewBag.Table= tableString; 

      return View("ShowReport"); 

     } 

我调试的ViewBag.Table的查看,可以看到HTML字符串。但视图永远不会被更新/呈现。我用一个简单的文字像测试:

@if (ViewBag.Table != null) 
{ 
     //@ViewBag.Table;  
     @:The day is: @DateTime.Now.DayOfWeek. 
} 

它进入代码,所以我知道ViewBag.Table不为空,但该字符串没有得到呈现,无论是。

是否需要刷新_layout.cshtml中的RenderBody()?或者有什么影响?

- 阿贾克斯call--

按钮onclick事件调用此方法的ajax:

$.ajax({ 

      url: "/Home/ShowReport", 
      data: { URL: urlString} , 
      type: 'POST', 
      success: function(data) { 
       alert(data); 
      }, 
      error: function (e, textStatus, jqXHR) { 
       alert(e.statusText); 

      } 

     }); 
+0

您绝对必须包含代码示例。不容易包含足够的代码,并且不会让它压倒性的,否则你的场景是不可追踪的 – 2013-05-03 02:53:12

+0

谢谢,由于它太罗嗦,我缩短了我的解释。 – alpha 2013-05-03 03:18:44

+0

这很奇怪。你不需要Html.Raw。你的第一次尝试应该每次都做。添加控制器代码,在其中填充ViewBag变量。我不能想到任何其他问题,而不是无法填充。 – 2013-05-03 03:23:28

回答

1

改变你的操作方法返回JSON内容

public ActionResult ShowReport(string URL) 
    { 
     string tableString = ""; 

     [Code to Create table called ReportTable and add rows etc] 

     tableString = RenderControlToString(ReportTable); 

     //ViewBag.Table= tableString; 

     return this.Content(tableString, "application/json"); 

    } 

改变你的jQuery来再利用您的退货价格

 success: function(data) { 
      $('#divTable').innerHTML(data); 

并在您想要呈现html的视图中添加一个div

<div id='divTable'></div> 
+0

就是这样!非常感谢!!桌子现在正在渲染! – alpha 2013-05-03 05:30:56

+0

很高兴提供帮助。将来,考虑使用子操作方法和jquery'.load'方法的部分视图。这是一个有点学习,但是一个更好的方式来实现你想要的,并会给你更多的灵活性。 – 2013-05-03 05:37:21

相关问题