2010-04-12 74 views
3

我已阅读了这个问题中的信息:Controls versus standard HTML但我还是很困惑。ASP .NET混淆 - 服务器控件

情况是我被要求做一个web项目,我做了一个向导。当我完成这个项目时,每个人都问为什么我使用了<asp:Wizard...>。我认为这是被问到的,但显然不是,所以在这之后,我被引导认为服务器控件只是原型工具。

但是,下一个项目我通过C#代码隐藏完成了我的数据库查询,并通过html加载了结果。然后问我为什么没有使用gridview和数据集。

有没有人有权利和利弊的列表,他们为什么会选择使用特定的html控件在特定的服务器控件,为什么?我想我正在寻找一个列表...什么服务器控件可以使用,为什么?

编辑: 我想这个问题是开放式的,所以我会澄清一些更具体的问题......

  1. 是否还好非常简单易用的控制,如ASP:标签或做这些最终会浪费空间?看起来好像很难在代码中访问html。

  2. 是否有几个控件应该永远不会被使用?

  3. 有没有人有一个很好的资源,将显示每个控件的利弊?

回答

3

服务器控件依靠ViewState中,限制灵活性

服务器控件分别来介绍的WinForms开发者网络开发的强大工具。 Server Controls提供的主要优势是状态感和事件驱动的开发模式。然而,自从引入WebForms和服务器控件以来,Web开发的状态一直在成熟,整体而言,它们正在受到increasingly critical view的挑战。

服务器控件的主要问题是他们试图抽象Web的行为太多,这样做依靠数据和服务器资源来执行他们的魔力。 ViewState数据过度使用会严重增加页面的大小,导致performance problems

现在有可能到opt out of ViewState,但是到那时只需求助于常规的HTML控件就更好了。

使用HTML控件,您可以精确控制网页的内容,并且在网页上您想要的行为方面具有更大的灵活性。服务器控件提供有限的客户端灵活性,并强制在服务器上执行大量的工作,这些工作可以很容易地在浏览器中以良好的JavaScript framework执行。

+0

非常有帮助 - 感谢所有的资源。 – Brandi 2010-04-15 16:51:21

+0

感谢您的投票。争论双方仍有很多争议。一方面,服务器控件更容易设置,但另一方面,HTML控件提供更精细的控制,并可能更好地执行。这真的取决于你的情况。作为一个经验法则:如果您只是要显示平面,只读内容,请使用HTML控件或缩放后的服务器控件,例如Literal或Repeater而不是Label和GridView。此外,请尝试在默认情况下禁用ViewState,并且只在选择时提供明显的优势。 – Technobabble 2010-04-15 22:06:26

1
  1. 是否还好非常简单易用的控制,如ASP:标签或做这些 刚刚结束了浪费空间?看起来好像 就像在其他代码背后很难访问 html一样。

如果您需要访问服务器端代码中的控件,请使用服务器控件。如果不是,不要。

  1. 是否有几个控件不应该被使用?

不符合我的(中级)经验。向导控件,一旦你知道如何使用它,就像广告一样工作(想象自己编写所有的功能,然后做数学)。我已经使用了它,并且导致了一个平滑而实用的多页注册表单,中间保存了数据。

  • 没有人有一个很好的资源,它会告诉我的 每个控制利弊?
  • 我不这样做,但我建议你使用正确的情况下正确的控制。例如,研究Repeater和GridView之间的差异,并根据您的需要使用最佳选择。

    当然有替代品。首先,MVC正在获得动力。我个人还没有承诺要学习它。就交互式表单和AJAX而言,许多.NET开发人员都选择使用JQuery来进行任何验证和任何AJAX(UpdatePanels易于使用且效率非常低),并使用JSON作为服务器端的传输机制。

    +0

    嗯......如果你绝对需要,可以从代码后面访问html控件吗? – Brandi 2010-04-15 16:13:30

    +0

    另外,感谢您的意见。我当时想知道是否有人比我更熟悉ASP .NET是使用这些控件的粉丝。 – Brandi 2010-04-15 16:53:32

    +0

    布兰迪:是的。如果你想从服务器端访问“常规”的html控件,你可以这样做:

    。 (添加'runat'属性)在这里查看一个列表:http://www.w3schools.com/aspnet/aspnet_refhtmlcontrols.asp你只是不会得到你使用控件获得的事件模型。 – sweaver2112 2010-04-16 15:09:42