0
フォーム上のボタンをクリックすると呼び出されるメソッドを持つコントローラがあります。 私のビューバック(htmlを含む文字列)内の変数を設定し、私はこのビューの内容を私のビューに表示しようとします。なんらかの理由で、ビューバックの内容が変更されません。ViewBagにHTMLを設定する
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>
システムは、コントローラのコード内のメッセージボックスが表示されたら、それは適切な値を表示します。ここ
は私のコントローラのコードがあります。しかし、ビューが表示されたら、ビューバックデータの正しい初期値が表示され、サブミットボタンを押すとコントローラのコードは正しく実行されますが、ビューバッグは古いデータを表示します。
私はインデックス関数内の行を削除しようとしましたが、違いはありません...実際にはインデックスルーチンにブレークポイントを入れて、ページが読み込まれると一度だけ呼び出されます。ビュー( "index")を返すと再び呼び出されない – dot
私の関数のhttppost属性と関係がありますか?私はそれが事実かもしれないと思う理由はここにあります。私はホームページとmvcテンプレートプロジェクトを作成するときにデフォルトで作成されたaboutページの周りを試してみました。これは、viewbagの値をHTTPPOST関数に変更する関数を変更するまで、viewbagを使ってデータを前後に渡すことができます。私がそれをしたら、それはもはや機能しません。 – dot
ちょっと@dot、たぶん、あなたは本質的にリダイレクトでやっていることですが、TempDataは異なるHTTPRequests間で持続するはずですので、ViewBagの代わりにTempDataを使用するようにしてください。それは動作しません –