フォームのボタンがクリックされたときに呼び出されるメソッドを持つコントローラーがあります。ビューバッグ (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>
システムがコントローラ コードにメッセージ ボックスを表示すると、適切な値が表示されます。しかし、ビューが表示されると、ビューバッグ データの正しい初期値が表示され、送信ボタンを押すと、コントローラーのコードは正しく実行されますが、ビューバッグには古いデータが表示されます。