我正在处理具有动态生成标记的页面。因此,我不知道表单上有哪些字段可用。因此,POST方法不是创建视图模型,而是使用FormCollection。收到POST后,程序会快速运行。
我的问题:单击表单上的SUBMIT大约需要10到15秒才能在控制器的POST操作的第一行上找到一个断点。在我的方案中,表单上有800个输入字段。为800个字段创建FormCollection真的需要这么长时间吗?有没有办法简化流程或缩短响应时间?
编辑:
IE探查器指示大部分时间花在JQuery CSS选择器上。如果我删除所有CSS,页面的工作速度非常快。为什么CSS选择器在回发到服务器之前运行?我可以禁用吗?
编辑2: 分析器现在在JQuery 1.6.4.min.js中显示时间花费,函数为'k'。我认为这只是一个内部的变量查找。我还发现从输入字段中删除'size'和'maxlength'属性会使页面快速响应(万岁)......除了......我需要那些用于客户端验证。我仍然试图找到一种方法来提高速度,或者删除属性并保留一些方法来限制客户端字段的输入长度。
编辑3: 我挖到了jquery-1.6.4.min.js并找到了函数k。根据编辑2,添加/删除'maxlength'和'size'属性会产生差异(33K ms而不是3k ms)。但是,函数K不应该做太多...因为那些不是nodetype === 1并且第一个IF应该失败,返回到下一行的函数。
function k(a,c,d)
{
if(d===b&&a.nodeType===1)
{
var e="data-"+c.replace(j,"-$1").toLowerCase();
d=a.getAttribute(e);
if(typeof d=="string")
{
try
{
d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)
}
catch(g){}
f.data(a,c,d)
}
else
d=b
}
return d
}
答案 0 :(得分:1)
我刚刚创建了一个包含1000个字段的表单,控制器可以在不到一秒的时间内访问每个字段。
这是我创建字段的方式
<script language="javascript" type="text/javascript">
$(document).ready(function () {
for (var i = 0; i < 1000; i++) {
$('<input/>').attr({ type: 'text', id: 'test'+i, name: 'test'+i,value:'test '+i }).appendTo('#fields');
}
});
</script>
这就是行动
public ActionResult TestFields()
{
for (int i = 0; i < 1000; i++)
{
if (Request.Form[i] != string.Format("test {0}", i))
{
throw new Exception("bad value received");
}
}
return View();
}
填充FormCollection似乎不是问题。我有短值并在本地网络上进行测试。如果您的值较长且网络较慢,则可能是问题所在。如果您的每个值都是1KB,则需要发送800KB。
答案 1 :(得分:0)
根据Mystere Man的评论,客户端以某种方式验证,此链接解决了问题:http://forums.asp.net/t/1523883.aspx/1/10?Disabling+client+side+validation+on+submit+button+
基本上,我在提交按钮上禁用了验证。这允许'maxlength'和'size'属性在用户键入时起作用,但阻止POST上的任何客户端验证。这种行为似乎很好,因为服务器将在处理输入时再次验证。 POST的平均时间从33秒变为2秒。
此处:Disable client-side validation in MVC 3 "cancel" submit button