注このロジックを追加してみましょう。今では、少なくとも2つのオプションがあります:
1)JavaScript配列にリスト全体を保存すると、コールバックは単にループバックします。 JavaScriptの配列にC#の配列について
<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>
ワンノート:Json.Encode()
(それは広くもここでスタックオーバーフロー上、奨励いても)は使用しないでください。 JavaScriptとJSONのエスケープルールは異なりますが、小さな交差点がありますが、有効なJSON文字列は有効なJavaScript文字列ではありません。例えば/は\/
としてJSONにエスケープすることができるが、JavaScriptでそれが無効なエスケープシーケンス(ほとんどのブラウザがそれを受け入れる場合でも)です。
2に
(...有効なJSON文字列としてオブジェクトをコードしている)、それが実際に何をするか
Json.Encode()
重要ではありません、それはまだそのインタフェースを尊重し、その動作を変更することができ、
http://www.example.com/images/01.png
)あなたのViewModelに画像のURLを保存しないでください。考えてみて、ちょうどその長さ。クライアント側のJavaScriptコードは、たとえば
http://www.example.com/images/1
を使用してサーバーにクエリを実行し、コントローラメソッドはIDからイメージを解決し、
File()
で返します。または応答ストリームに直接書き込みます。この制御方法によれ
<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>
:
public class ImagesController : Controller {
public ActionResult Read(int id) {
return ... // your code here
}
}