了解ASP.NET中的回发

时间:2009-01-05 15:33:18

标签: asp.net

例如,

如果我在页面上有一个带有runat = server的文本框,该值将被发回服务器,以便我可以访问代码隐藏中的属性。

但是,在以下情况下,它仍然适用吗?

  • 带有runat = server的文本框,但不会出现在回发的函数中。例如,页面上也有一个按钮,当单击回发时,在引发的方法中,不使用此文本框。
  • 在MasterPage中,主页上的文本框是否会被回发?

因为只是思考,这种机制本质上不是臃肿吗?

如果所有输入控件及其值都在每次单击按钮时回发(即使不需要输入控件),这是否会降低性能?

页面上只有一个表单标签真的限制我们使用这种机制吗?

9 个答案:

答案 0 :(得分:3)

Truly Understanding ViewState是关于ASP.NET ViewState主题的必读文章

答案 1 :(得分:2)

有几个选项可以减少膨胀(是的,在处理大量控件时有很多选择):

  1. 使用AJAX仅发布所需的项目 - 尽管小心允许未启用JavaScript的客户端仍然使用该页面/站点。
  2. MVC框架允许使用多个表单标记,因此您可以根据需要对部分进行分组。
  3. 在页面/控件上将EnableViewState设置为false。
  4. 将您的网页分解为较小的网页。
  5. 此外,请查看Page Life Cycle in ASP.NET的精彩图形表示。

答案 2 :(得分:1)

除非您使用ajax,否则页面上的每个输入都将完全回发,因为单个表单标记。欢迎来到asp.net ...

答案 3 :(得分:1)

只要你在服务器端点击的方法是页面类的非静态成员,它就可以访问文本框和页面上的所有其他控件。

是的,所有呈现给浏览器的控件(无论是在MasterPage,用户控件等)都可以在回发时使用。

您可能需要查看Understanding ASP.NET View State

这种体系结构确实存在性能问题,但是(取决于页面的复杂性)从服务器负载的角度来看,它通常不是问题,因为硬件升级通常比在优化应用程序性能上花费额外的编程时间更便宜。 p>

如上所述,(正如其他人所指出的那样)如果你想避免整个页面级回发到服务器,请考虑使用AJAX

答案 4 :(得分:0)

是的,它全部贴回来了,是的,它可能导致臃肿。我敢肯定,如果你搜索ViewState,你会发现有很多人在讨论它以及如何最小化它:)

答案 5 :(得分:0)

是的,您的文本框在两种情况下都可用,是的,它是膨胀的。这就是AJAX发挥作用的地方。使用AJAX,您只需发送所需的数据。

如果要发送最小数量的数据,可以使用页面方法(页面上的静态方法修饰,以便脚本管理器构建javascript来调用它,或者您可以使用jquery或其他方法调用它)或脚本启用的Web服务也很好用。

您还拥有可以变得非常大的viewstate。 ASP.Net MVC是一种新的范例,而不是使用没有视图状态或回发的WebForms。它包含HTTP而不是隐藏它,为开发人员提供更多控制权。

答案 6 :(得分:0)

如上所述,文本框数据将被回发。除了使用Ajax之外,禁用视图状态会极大地影响页面的性能,即使那时对控件功能(控件状态)至关重要的属性中的数据仍会被回发。

答案 7 :(得分:0)

如果您没有对表单上的每个控件进行回发,您将无法在代码隐藏中访问它。即如果在你的按钮按下你想要修改文本控件的属性你不能这样做,因为ASP.Net对文本控件一无所知。

由于服务器和客户端之间的通信是无状态的,并且每次页面都是服务器时服务器都会忘记它的全部内容如果您想再次使用同一页面,则回发很重要。无论您使用何种编程语言,都存在这种或类似的机制来处理服务器端代码。

如果您希望最小化回发(视图状态大小),请执行此操作。

  • 在您不想回发的所有控​​件上设置enableviewstate = false。
  • 尽可能使用AJAX和Web服务(不要使用UpdatePanel)。
  • 尽可能使用HTML控件而不是ASP.Net控件。
嗯..在其他答案和良好的链接中也有一些很好的建议。

答案 8 :(得分:-1)

你几乎用香草ASP.NET击中头部 - 它不是很好!在您描述的两个实例中,答案都是肯定的 - 文本框将与表单一起发送。

整个postback / ViewState问题有点痛苦,任何有能力的ASP.NET开发人员学习的第一件事就是避免它们!