用HTML填充ViewBag

用HTML填充ViewBag,html,asp.net-mvc,viewbag,Html,Asp.net Mvc,Viewbag,我有一个控制器,它有一个方法,当单击表单上的按钮时会调用该方法。 它在我的viewbag(一个包含html的字符串)中填充一个变量,然后我尝试在视图中显示该变量的内容。由于某些原因,viewbag的内容不会更改。 以下是我的控制器中的代码: Function Index() As ActionResult Dim TotalPSys As MyBusinessLayer.ListPSysAndMods = New ListPSysAndMods View

我有一个控制器,它有一个方法,当单击表单上的按钮时会调用该方法。 它在我的viewbag(一个包含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
函数索引()作为ActionResult
将TotalPSys设置为MyBusinessLayer.ListPSysAndMods=新建ListPSysAndMods
ViewBag.HTMLForMods=“设置”
ViewBag.Test=“123”
返回视图(TotalPLC)
端函数
函数将modulesforpsys(ByVal strpssysid作为字符串)显示为ActionResult
// .... 做点什么。。。。
returnHTMLString=“显示模块名称”
对于modulelist中的每个moduleitem
returnHTMLString=returnHTMLString+“编号:Html.DisplayFor(函数(x)”+moduleitem.SlotNumber+”)
returnHTMLString=returnHTMLString+“RevNumber:Html.DisplayFor(函数(x)”+moduleitem.RevisionNumber+”)
returnHTMLString=returnHTMLString+“IP地址:Html.DisplayFor(函数(x)”+moduleitem.ModuleIP+””
下一个
returnHTMLString=returnHTMLString+“”
'ViewData(“HTMLForMods”)=返回HTMLSTRING
ViewBag.HTMLForMods=returnHTMLString
'MsgBox(ViewBag.HTMLForMods)
ViewBag.Test=“456”
MsgBox(视图包测试)
返回重定向操作(“索引”)
端函数
视图中的代码如下所示:

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

@查看包。测试


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

看起来您正在重定向到index,因此您的Viewbag.HtmlForMod将被index操作方法中定义的内容覆盖。

我尝试删除index函数中的行,但这没有什么区别……事实上,我在索引例程中设置了一个断点,它只在页面加载时被调用一次。当我返回view(“index”)时,它不会再次被调用。它是否与函数的httppost属性有关?这就是为什么我认为可能是这样。我试着在创建mvc模板项目时,在默认情况下创建主页和关于页面。它允许我使用viewbag来回传递数据没有问题。。。直到我将修改viewbag值的函数更改为HTTPPOST函数。一旦我这么做了,它就不起作用了。嘿@dot,也许你应该尝试使用TempData而不是ViewBag,因为TempData应该在不同的HTTPRequests之间持久存在,这就是你使用重定向的本质,但是你仍然应该点击重定向上的索引。。不知道为什么这样不行