我正在寻找其他人用来处理具有大量字段的ASP.NET Web表单的策略。例如,我们有一个页面,在用户控件中可以有大约200个字段和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。
中抱歉,我忘了提及如何将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));}
}
}