繁体   English   中英

了解ASP.NET中的回发

[英]Understanding Postbacks in ASP.NET

例如,

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

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

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

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

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

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

真正理解ViewState是一篇关于ASP.NET ViewState主题的必读文章

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

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

另外,请查看ASP.NET中页面生命周期的精彩图形表示。

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

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

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

您可能希望了解了解ASP.NET视图状态

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

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

是的,这都是贴回来的,是的,它会导致膨胀。 我敢肯定,如果你搜索ViewState,你会发现有很多人在讨论它以及如何最小化它:)

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

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

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

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

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

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

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

  • 在您不希望发回的所有控件上设置enableviewstate = false。
  • 尽可能使用AJAX和Web服务(并且不要使用UpdatePanel)。
  • 尽可能使用HTML控件而不是ASP.Net控件。

嗯..在其他答案和良好的链接也有一些很好的建议。

你已经用香草ASP.NET打了很多头 - 它不是很好! 在您描述的两个实例中,答案都是肯定的 - 文本框将随表单一起发送。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM