Beachten Sie, dass Bildpfade auf Server-Seite zur Verfügung stehen (in Ihrem Viewmodel), aber Umschaltung wird auf Client-Seite (mit setInterval
) hergestellt. Jetzt haben Sie (mindestens) zwei Optionen:
1) Speichern Sie die gesamte Liste in einem JavaScript-Array, setInterval()
Callback wird dann einfach durchlaufen.
<script type = "text/javascript">
var currentImage = 0;
var images = @("[" + String.Join(",", Model.lstImage.Select(x =>
String.Format("\"{0}\"", HttpUtility.JavaScriptStringEncode(x.image_path)) + "]");
$(document).ready(function() {
setInterval(function() {
currentImage = (currentImage === images.length - 1) ? 0 : currentImage + 1;
document.getElementById("memImg").src = images[currentImage];
}, 2000);
});
</script>
Eine Anmerkung über C# Array JavaScript-Array: nicht verwenden (auch wenn es weit gefördert ist, auch hier auf Stack-Überlauf) Json.Encode()
. Die Regeln zum Escaping für JavaScript und JSON unterscheiden sich, es gibt einen kleinen Schnittpunkt, aber eine gültige JSON-Zeichenfolge ist möglicherweise keine gültige JavaScript-Zeichenfolge. Beispiel: /kann in JSON als \/
maskiert werden, aber in JavaScript ist es eine ungültige Escape-Sequenz (auch wenn die meisten Browser es akzeptieren). Denkanstöße: http://www.example.com/images/01.png
, spielt es keine Rolle, was Json.Encode()
tatsächlich der Fall ist, kann es sein Verhalten ändern noch seine Schnittstelle zu respektieren (Codieren eines Objekts als gültige JSON-String ...)
2) nicht Bild-URLs in Ihrem Ansichtsmodell speichern , nur seine Länge. Client-seitiger JavaScript-Code fragt dann den Server ab (z. B.): http://www.example.com/images/1
und Ihre Controller-Methode löst das Bild von seiner ID auf und gibt es mit File()
zurück oder schreibt es direkt in den Antwort-Stream.
<script type = "text/javascript">
var currentImage = 0, imageCount = @Model.lstImage.Count;
$(document).ready(function() {
setInterval(function() {
currentImage = (currentImage === imageCount - 1) ? 0 : currentImage + 1;
document.getElementById("memImg").src =
@Url.Action("Read", "Images") + "?id=" + currentImage;
}, 2000);
});
</script>
mit dieser Controller Methode:
public class ImagesController : Controller {
public ActionResult Read(int id) {
return ... // your code here
}
}