我在mvc中加载部分视图时遇到问题。我试图用jquery加载视图,它有点工作。它显示两个填充正确信息的div或四个填充相同的信息。但它循环遍历数组,因此参数变化,我得到一个警告。
自上一步以来,流程或线程已发生变化
我在jquery中有一个数组,里面有四个值,我需要该列表中的值作为ActionResult中的参数。
我的代码
public ActionResult TvShow(string channel)
{
var model = un.SortAllPrograms(channel);
return PartialView("TvShow", model);
}
和jquery
$(document).ready(function () {
var nameOfChannel = ["TV3", "TV4", "TV6", "TV8"];
debugger
$.each(nameOfChannel, function (index, value) {
$('.showContainer').append('<div class="number">' + value + '</div>');
$('.number').load('Home/TvShow', { channel: value });
});
});
我非常感谢有关如何使这项工作的一些帮助或建议。
答案 0 :(得分:0)
问题是,对于每个ajax调用,您正在使用类number
加载ajx调用对div的响应。因此,获取最后一个响应的ajax调用将用于更新所有具有该css类的div 。这就是你看到多个具有相同响应的div的原因,但这也是随机的,因为每次你的服务器每次呼叫都需要不同的时间来响应。有时候,TV6
的呼叫将是需要更多时间的呼叫。由于ajax是异步的,当响应返回时,会更新当时具有类number
的所有可用div 。你的循环可能正在执行它的第二次迭代,所以你只有2个div存在于那个css类中,因此它只会更新那两个div。
理想情况下,您希望加载为您正在循环的数组中为特定字符创建的div。
这应该这样做。
$(function() {
var nameOfChannel = ["TV3", "TV4", "TV6", "TV8"];
$.each(nameOfChannel, function (index, value) {
var $d = $("<div class='number'>")
.load('@Url.Action("TvShow")',{ channel: value });
$('.showContainer').append($d);
});
});
请记住,您当前的方法是对服务器进行n次调用(其中n是数组的大小)。您可以考虑将数组作为参数发送并进行单个调用,该调用可以返回所有项目的标记,从而产生一次调用。使用对您的用例更有意义的方法。