0

我正在处理具有动态生成标记的页面。因此,我不知道表单上有哪些可用字段。因此,POST 方法不是创建视图模型,而是使用 FormCollection。一旦收到 POST,程序就会快速运行。

我的问题:单击表单上的 SUBMIT 大约需要 10 - 15 秒才能在控制器中 POST 操作的第一行遇到断点。在我的场景中,表单上有 800 个输入字段。只为 800 个字段创建 FormCollection 真的需要这么长时间吗?有什么方法可以简化流程或缩短响应时间?

编辑:

IE 分析器表明大部分时间都花在了 JQuery CSS 选择器上。如果我删除所有 CSS,页面会很快运行。为什么 CSS 选择器在回发到服务器之前运行?我可以禁用它吗?

编辑 2:分析器现在显示在 JQuery 1.6.4.min.js 中花费的时间,函数是“k”。我认为这只是一个内部变量查找。我还发现从输入字段中删除“大小”和“最大长度”属性会使页面快速响应(万岁)......除了......我需要那些用于客户端验证。我仍在尝试寻找一种方法来提高速度,或者删除属性并保留一些方法来限制客户端字段的输入长度。

编辑 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
    }
4

2 回答 2

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。

于 2012-07-15T16:45:10.137 回答
0

从 Mystere Man 的评论中,结果证明客户端正在验证,这个链接解决了这个问题: http ://forums.asp.net/t/1523883.aspx/1/10?Disabling+client+side+validation+在+提交+按钮+

基本上,我禁用了提交按钮上的验证。这允许 'maxlength' 和 'size' 属性在用户键入时起作用,但会阻止 POST 上的任何客户端验证。这种行为似乎很好,因为服务器将在处理输入时再次验证。POST 的平均时间从 33 秒变为 2 秒。

也在这里: 禁用 MVC 3“取消”提交按钮中的客户端验证

于 2012-07-17T15:56:43.523 回答