我在VS2013上有一个asp.net 4.5(C#)页面。在这个页面中,我使用一个循环来itrate抛出我的一些对象。对于每个对象(产品)我有一个文本框(使用type = textbox输入),我使用jquery来使它成为一个微调器。
我需要在每个产品的循环中使用它,因为我希望每个微调器都有来自对象的参数(min,max,步长,十进制等)。
循环就是这样的:
foreach ( Product product in getCart().ItemsList() ) {
String spinnerId = "spinner_" + product.Code;%>
<input id="<%:spinnerId %>" name="<%:product.Code%>">
<script type="text/javascript" language="javascript">
setSpinner('<%:spinnerId%>','<%:product.min%>','<%:product.max%>','<%product.step%>');
</script>
<%}%>
在页面的头部我有:
function setSpinner(id,minVal,maxVal,stepVal){
j("#"+id).spinner({
min: minVal,
max: maxVal,
step: stepVal,
});
}
问题是,当我的循环经过几次(10-15)时,页面加载非常purley并且“onready”函数需要几秒钟才能执行,这意味着需要一些字段隐藏显示2秒,只有disaperas(这包括ajaxcontroltoolkit控件,如popupextender面板等)。
为了简单起见,javascript代码本身无关紧要。 如果您尝试这样的事情:
<%for (int i=0;i<100;i++){%>
<script type="text/javascript" lang="javascript">
</script>
<%}%>
同样的问题发生了。
如果您多次使用它,即使是一个空的javascript块也会让页面花费很长时间才能完成。
为什么50 \ 100空的javascript块会使页面滞后如此糟糕?我可以做些什么来解决这个问题,考虑到我必须在我的每个对象数据中使用javascript代码?
答案 0 :(得分:0)
首先看看@ David的ans,这肯定是一个更好的方法
@roland清除了这是丑陋的。 即使你需要将js注入网页。最好注入一个js对象和包含所有对象的数组,然后在page load
内的一个块内迭代它并完成你的工作。
var ps = getCart()。ItemsList()。选择(p =&gt; new { p.Id /...所有你的财产...... / });
现在使用任何json库(如Newtonsoft.Json
)在网页/脚本标记内注入ps。
var jsonString = JsonConvert.SerializeObject(ps);
答案 1 :(得分:0)
尝试在data-
HTML属性中添加所需信息,并一次调用javascript。像
foreach ( Product product in getCart().ItemsList() ) {
String spinnerId = "spinner_" + product.Code;%>
<input id="<%:spinnerId %>" class="spinner" name="<%:product.Code%>" data-min="<%:product.min%>" data-max="<%:product.max%>" data-step="<%:product.step%>">
<%}%>
然后使用jQuery迭代“spinner”类输入:
$("input.spinner").each(function(intput){
$(this).spinner({
min: $(this).data('min'),
max: $(this).data('max'),
step: $(this).data('step'),
});
});