Ajaxを使用して部分的なビューを更新し、コントローラを呼び出してリフレッシュを実行するときにViewBagの内容を使用できないことがわかりました。MVC 3 ViewBag部分ビューの更新が失われました
特に、私はViewBag.ItemToMonitorにアイテムを配置します。パーシャルビューが初めてレンダリングされたときに使用できます(ここではコントローラで使用しますが、ビューでも使用しました)。部分ビューをAjaxでリフレッシュすると、ViewBagには、のItemToMonitorには何も含まれていません。
更新時にデータを利用できるようにするにはどうすればよいですか?
ここMVC 3プロジェクトテンプレートに基づいて、簡単な例です:
Index.cshtml
<div>
Select an item to monitor:
<ul>
<li>@Html.ActionLink("One", "Monitor", new { itemToMonitor = "Item One" })</li>
<li>@Html.ActionLink("Two", "Monitor", new { itemToMonitor = "Item Two" })</li>
<li>@Html.ActionLink("Three", "Monitor", new { itemToMonitoritem = "Item Three" })</li>
</ul>
</div>
Monitor.cshtml
@model string
<script type="text/javascript">
setInterval(function() {
$.post('@Url.Action("_MonitorDetails")', function (data) {
$('#refreshMe').html(data);
}
);
}, 5000);
</script>
<h2>Monitor</h2>
<div>Monitoring @ViewBag.ItemToMonitor</div>
<div id="refreshMe">
@Html.Partial("_MonitorDetails")
</div>
_MonitorDetails.cshtml
@model string
<div style="background-color:Blue; color:White">
This is my partial view to monitor '@Model', updated at @DateTime.Now.ToString("u").
</div>
HomeController.cs
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult Monitor(string itemToMonitor)
{
ViewBag.ItemToMonitor = itemToMonitor;
return View((object)itemToMonitor);
}
public ActionResult _MonitorDetails()
{
string itemToMonitor = ViewBag.ItemToMonitor;
// itemToMonitor is null. Why?
return PartialView((object)itemToMonitor);
}
渡す:私はMVCのtelerikグリッド内で、実際にこのような私の見解、このデータを取得することができます
:
は例えば、私のコントローラで私はこのような何かを持っていますAjaxリクエストのitemToMonitorに沿って動作します。もっと簡単なアプローチを望んでいる間、これをもう少し長く開いておきます。 –
私はプリアクションハンドラやそのようなもののようないくつかのオプションを念頭に置いていますが、それはさらに複雑になるので、私は最も簡単な方法を述べたと思います。しかし、より簡単な解決策も見られてうれしいです! – Marc