巨大的ASP.NET Web窗体

时间:2013-12-19 19:46:38

标签: asp.net webforms

我正在寻找其他人用来处理具有大量字段的ASP.NET Web表单的策略。例如,我们有一个页面,在用户控件中可以有大约200个字段和3个数据输入网格。现在我们希望添加更多。在我看来,在某种程度上,观点或其他东西将会崩溃。所以我很想知道其他人如何处理这个领域。

基于以下良好反馈的更多信息:我想也许可以将我的主表单更改为更多的仪表板,当用户想要输入/编辑数据部分时,他们会完全重定向到新页面。当它们完成后,它会重定向回来。我们已经拥有3个网格的用户控件(完全不同类型的数据)。但是我发现用户控制是噩梦,就像他们渲染,与“父母”等的互动一样。

3 个答案:

答案 0 :(得分:3)

我有一个包含超过1500个表单字段的表单,到目前为止还没有问题。你应该没事,除非你的服务器资源贫乏或你有非常大的负荷。

然而,你应该记下这个让我不知不觉的巨大陷阱:

http://support.microsoft.com/kb/2661403

默认情况下,1000个表单控件是您可以提交到页面的最大值。并且没有抛出错误,页面只接受前1000个项目,而忽略其余项目。在生产环境中非常棒的发现...

幸运的是,您可以在web.config中覆盖该默认值:

<appSettings>
 <add key="aspnet:MaxHttpCollectionKeys" value="10000" />
</appSettings>

我不推荐使用那么多控件的表单,但它是在客户端的坚持下:)

答案 1 :(得分:1)

  

我正在寻找其他人处理ASP.NET网络的策略   形式与大量的领域。

我喜欢分享我在一个包含数百个字段的表单的罕见情况下使用的“技巧”。在回发后我消除了实际上没有变化的字段,或者它们有一些默认输入。在回帖后我知道我已消除的字段,通常默认操作我不需要做任何事情。例如,一个非选择复选框,或一个没有改变的输入字段,等等....

这样,实际帖子显着变小了。例如,在jQuery上有一个简单的代码:

function cOnSubmit()
{
    jQuery(".MyInputCss").each(function(index, domElem) 
    {
        var me = jQuery(domElem);

        // just an example - if the default have selected of no action, I eliminate it.
        if(me.find("input[type='radio']:checked").val() == "-1")
        {
            // removing the name is not take part on the post back
            me.find("input").removeAttr("name");
        }
    });

    return true;
}

在表单上我将此函数称为:

<form .... onsubmit="return cOnSubmit();">

答案 2 :(得分:1)

  

在我看来,在某种程度上,观点或其他东西是   要崩溃了。

1)如果您有很多控制权,最终会因为对象的当前状态操作无效

可以使用像Chris Hardie建议的MaxHttpCollectionKeys轻松修复。

注意:除文本框服务器控件外,标签服务器控件也算作一个控件。

2)我能想到的另一个问题是大型ViewState

为了解决这个问题,您可以将ViewState存储在StateServer or SQL Server

2013年12月20日更新:

抱歉,我忘了提及如何将ViewState保存到Session。

由于您已将SessionState存储为SQL Server,因此您只需从此BasePage继承aspx页面。

public class BasePage : Page
{
  protected PageStatePersister _persister;

  protected override PageStatePersister PageStatePersister
  {
    get { return _persister ?? (_persister=new SessionPageStatePersister(this));}
  }
}