用HTML填充ViewBag
问题描述:
我有一个控制器,当我的窗体上的按钮被点击时调用一个方法。 它在我的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显示旧数据。
答
看起来您正在重定向到索引,因此您的Viewbag.HtmlForMod将被索引Action Method中定义的内容覆盖。
我试图删除索引函数中的行,但这并没有什么区别...实际上,我在我的索引例程中放置了一个断点,并且它只在页面加载时才被调用一次。当我返回视图(“索引”)时它不会再被调用 – dot 2011-12-20 15:58:41
它是否与我的函数上的httppost属性有关?这就是为什么我认为可能是这种情况。我尝试在主页和默认创建的mvc模板项目时创建的about页面进行游戏。它允许我使用viewbag来回传递数据,直到我将修改viewbag值的函数更改为HTTPPOST函数。一旦我这样做,它不再有效。 – dot 2011-12-20 16:01:59
hey @dot,也许你应该尝试使用TempData而不是ViewBag,因为TempData应该持续存在于不同的HTTPRequests中,这就是你基本上用Redirect做的事情,你仍然应该在重定向上点击索引..不知道为什么这是行不通的 – 2011-12-20 18:57:11