MVC 5 Auto erfrischende Teilansicht
Habe ich eine partial view angezeigt wird, und die Fußzeile der Seite in der _Layout. Der controller berechnet einen Wert jede Sekunde - die Zahl der Opfer von computer-Kriminalität.
Controller-Code:
namespace EUWebRole.Controllers
{
public partial class PartialFooterStatisticsController : Controller
{
[OutputCache(NoStore = true, Location = OutputCacheLocation.Client, Duration = 1)]
public ActionResult Index()
{
//14 victims per second.
//what second is it
int hrs = DateTime.Now.Hour;
int min = DateTime.Now.Minute;
int sec = DateTime.Now.Second;
int totalSeconds = sec + (min * 60) + (hrs * 3600);
int totalVictims = totalSeconds * 14;
ViewData["TotalVictims"] = totalVictims.ToString("N0");
return PartialView("_PartialFooterStatistics");
}
}
}
Dem Partial view sieht wie folgt aus - keine Formatierung oder etwas - ich möchte nur den Wert für heute 😛
@ViewData["TotalVictims"]
Schließlich, der _Layout-Bereich für dieses ist hier:
@Html.Partial("_PartialFooterStatistics")
Wie bekomme ich den Wert für die Anzeige in _Layout und update jede Sekunde, ohne die gesamte Seite aktualisiert wird - ich vermute, dass ist das, was die Teilansicht verhindern aber nicht sicher.
Sorry für so eine einfache Frage, aber wir alle irgendwo anfangen.
Dank
UPDATE 1
Ok, ich bin ein wenig weiter vorne jetzt.
Die GetVictimCount wird nur einmal aufgerufen.
Hier ist mein Aktuelles Controller-code:
public partial class PartialFooterStatisticsController : Controller
{
public ActionResult Index()
{
return PartialView("_PartialFooterStatistics");
}
public JsonResult GetVictimCount()
{
int hrs = DateTime.Now.Hour;
int min = DateTime.Now.Minute;
int sec = DateTime.Now.Second;
int totalSeconds = sec + (min * 60) + (hrs * 3600);
int totalVictims = totalSeconds * 14;
//logic here for getting your count
var victimCount = totalVictims;
return Json(victimCount, JsonRequestBehavior.AllowGet);
}
}
Meine Teilweise Anzeigen-code:
<script src="~/Scripts/jquery-1.10.2.js"></script>
<div id="victimCountId">
Result
</div>
<script type="text/javascript">
var timeoutId;
$(document).ready(function () {
timeoutId = window.setTimeout(UpdateCount, 1000);
});
function UpdateCount() {
$.getJSON("PartialFooterStatistics/GetVictimCount", function (dataResponse) {
var div = $('#victimCountId').html(dataResponse);
printResult(div, item);
});
}
function printResult(div, item) {
div.append("Result " + item.Line1);
}
</script>
und meiner _Layout Code
<footer>
<p>© @DateTime.Now.Year - My ASP.NET Application</p>
@Html.Partial("_PartialFooterStatistics")
</footer>
</div>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</body>
</html>
<script type="text/javascript">
$(function () {
setInterval(function () { $('#_PartialFooterStatistics').load('GetVictimStatistics'); }, 1000); //every 3 sec
});
</script>
function printResult(div, item) {
div.append("Result " + item.Line1);
}
</script>
Wie gesagt die Partielle Sicht nicht genannt wird, jede Sekunde, und die Leistung ist auch nicht das richtige... ich erwarte als "Ergebnis" und einer Zahl, die formatiert ist wie die 100.000, die es in den controller, sondern stattdessen alles, was ich bekommen ist 100000.
Gar nicht zu zeigen, den Inhalt der ViewBag.
Ich bin verwirrt mit deinem setup, Im ziemlich. Neue Firma MVC als gut, aber ich glaube nicht, dass die Schaffung controller für die partielle Ansichten sinnvoll. Welche URL verwendest du zum testen Ihrer Seite... Können Sie überprüfen, ob deine action-Methode wird immer aufgerufen wird?
Home index verwendet wird, als die partielle view ist eine berechnete Fußzeile.
InformationsquelleAutor Dave Gordon | 2014-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Jeremy West-sagte in den Kommentaren...müssen Sie javascript verwenden, um dieses geschehen zu lassen.
Ihre MVC-controller-action ist auf dem server, so dass nur ausgeführt wird, wenn es eine Anforderung, um diese Aktion.
Können Sie damit dies geschieht mit javascript (Sie senden Sie eine Anfrage im hintergrund).
Also eine Lösung, die möglicherweise für Sie arbeiten, ist eine Aktion, die gibt einige JSON. Eine Aktion könnte wie folgt Aussehen.
So, jetzt, dass Sie Ihre Logik, um Ihre Zählung, das auch weiterhin zu aktualisieren, können Sie einfach anrufen, das wird mit javascript. Mit jquery würde eine Lösung Aussehen
Dann, da Sie wollen, dass diese laufen jede Sekunde, die Sie nutzen könnten Fenster.setTimeout
Also mit dieser Lösung werden Sie das senden von Anfragen an den server pro Sekunde. Ich weiß nicht genau, was Sie tun auf dem server, oder wenn es sein muss, aber Wenn Sie können, verschieben Sie diese ganze Lösung, nur javascript, das wäre schneller und wahrscheinlich auch besser als server würde nicht haben, um so viele Anfragen.
Wieder, dies ist nur ein Weg, das Verhalten, das Sie nach.
Ich baute die ganze Sache zu einem Jscript Hinzugefügt _Layout und es funktioniert. Ich nahm den controller und die eingeschränkte Sicht. Q) Sollte ich es auf diese Art gemacht oder irgendwie fertig, die JScript in der partial view?
Es hängt davon ab. Setzen Sie den javascript-Code auf der main _Layout Seite ist in Ordnung, aber erkennen, dass die _Layout ist auf jeder Seite auf Ihrer website. Wenn es etwas ist nur relevant, auf der einen Seite, sollte es wohl auch sein in einem Blick, oder etwas, so dass Sie nicht ausgeführt, die javascript wenn es nicht benötigt wird
Gute Beratung, ich werde tun, dass heute.
InformationsquelleAutor Kyle Gobel