【问题标题】:populating ViewBag with HTML用 HTML 填充 ViewBag
【发布时间】:2011-12-20 14:25:24
【问题描述】:

我有一个控制器,当我点击表单上的按钮时调用该方法。 它在我的 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

视图中的代码如下所示:

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

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

【问题讨论】:

    标签: html asp.net-mvc viewbag


    【解决方案1】:

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

    【讨论】:

    • 我尝试删除索引函数中的行,但这并没有什么不同......实际上,我在索引例程中放置了一个断点,它只被调用一次 - 当页面加载时.当我返回 view("index") 时它不会再次被调用
    • 它与我的函数上的 httppost 属性有关吗?这就是为什么我认为可能是这种情况。我尝试在创建 mvc 模板项目时默认创建的主页和 about 页面进行播放。它允许我使用 viewbag 来回传递数据没有问题......直到我将修改 viewbag 值的函数更改为 HTTPPOST 函数。一旦我这样做了,它就不再起作用了。
    • 嘿@dot,也许您应该尝试使用 TempData 而不是 ViewBag,因为 TempData 应该在不同的 HTTPRequests 中持续存在,这实际上是您使用重定向所做的,您仍然应该点击重定向虽然..不知道为什么这不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 2011-11-04
    相关资源
    最近更新 更多