2011-12-20 75 views
0

我有一个控制器,当我的窗体上的按钮被点击时调用一个方法。 它在我的viewbag(一个包含html的字符串)中填充一个变量,然后我尝试在我的视图中显示这个内容。出于某种原因,视图包的内容不会改变。
下面是我的控制器代码:用HTML填充ViewBag

Function Index() As ActionResult 
     Dim TotalPSys As MyBusinessLayer.ListPSysAndMods = New ListPSysAndMods 
     ViewBag.HTMLForMods = "set" 
     ViewBag.Test = "123" 
     Return View(TotalPLC) 
    End Function 

    <HttpPost()> 
    Function ShowModulesForPSys(ByVal strPSysID As String) As ActionResult 
// .... do something.... 
     returnHTMLString = "<table><tr> <td>Show mods</td><td>Module Name</td></tr>" 
     For Each moduleitem In modulelist 
      returnHTMLString = returnHTMLString + " <tr> <td width='50%' style='background-color:#5c87b2'><font color='white'>Number:</font> </td><td>Html.DisplayFor(Function(x) " + moduleitem.SlotNumber + ")</td>" 
      returnHTMLString = returnHTMLString + "</tr><tr><td width='50%' style='background-color:#5c87b2'><font color='white'>RevNumber:</font></td> <td>Html.DisplayFor(Function(x) " + moduleitem.RevisionNumber + ")</td>" 
      returnHTMLString = returnHTMLString + "</tr><tr> <td width='50%' style='background-color:#5c87b2'><font color='white'>IP Address:</font></td><td>Html.DisplayFor(Function(x) " + moduleitem.ModuleIP + ")</td></tr>" 

     Next 
     returnHTMLString = returnHTMLString + "</table>" 
     'ViewData("HTMLForMods") = returnHTMLString 
     ViewBag.HTMLForMods = returnHTMLString 
     'MsgBox(ViewBag.HTMLForMods) 
     ViewBag.Test = "456" 
     MsgBox(ViewBag.Test) 
     Return RedirectToAction("Index") 

    End Function 

视图中的代码如下:

  <p>@Html.Raw(ViewBag.HTMLForMods)</p> 
     <p>@ViewBag.Test</p> 

当系统显示消息框在控制器代码,它会显示正确的价值观。但是当视图显示时,它显示viewbag数据的正确初始值,然后当我按下提交按钮时,控制器中的代码正确执行,但viewbag显示旧数据。

回答

1

看起来您正在重定向到索引,因此您的Viewbag.HtmlForMod将被索引Action Method中定义的内容覆盖。

+0

我试图删除索引函数中的行,但这并没有什么区别...实际上,我在我的索引例程中放置了一个断点,并且它只在页面加载时才被调用一次。当我返回视图(“索引”)时它不会再被调用 – dot 2011-12-20 15:58:41

+0

它是否与我的函数上的httppost属性有关?这就是为什么我认为可能是这种情况。我尝试在主页和默认创建的mvc模板项目时创建的about页面进行游戏。它允许我使用viewbag来回传递数据,直到我将修改viewbag值的函数更改为HTTPPOST函数。一旦我这样做,它不再有效。 – dot 2011-12-20 16:01:59

+0

hey @dot,也许你应该尝试使用TempData而不是ViewBag,因为TempData应该持续存在于不同的HTTPRequests中,这就是你基本上用Redirect做的事情,你仍然应该在重定向上点击索引..不知道为什么这是行不通的 – 2011-12-20 18:57:11