控件与标准HTML

时间:2008-08-22 11:18:08

标签: c# asp.net controls

我正在进入ASP.NET(C# - 我知道这对于这个特定的问题并不重要,但完整的披露和所有这些),虽然我喜欢asp: - 样式控件保存我很多繁琐的HTML制作,我经常对某些行为感到沮丧。我在使用母版页时遇到了一个问题:我的<asp:BulletedList ID="nav">转换为HTML后变为<ul id="ct100_nav">

还有其他问题 - 我注意到当你自动填充DataGrid时,它会在结果表中添加我不一定想要的属性。

我知道当你依靠一个框架来接管你的一些繁琐的职责时,你必须接受一定数量的“约定优于配置”,但这些情况下的“惯例”并非如此任何既定的惯例,而不是不必要的额外。我知道为什么 ID添加了前缀,但我应该能够调整并关闭这样的东西,特别是因为,作为一个Web标准布道者,我没有重复HTML id无论如何,单页。

所以这里的问题是那些比我更有经验的ASP.NET开发人员:在开发和部署应用程序的经验中,你如何利用这些控件?您是否发现自己回归硬编码的HTML?你用混合物吗?我不想在这些控件中围绕特殊怪癖设计我的HTML,但是,如果可能的话,我想在可能的情况下利用它们。

男孩要做什么?

11 个答案:

答案 0 :(得分:13)

就个人而言,

我认为标准的ASP.NET控件适用于内部的东西 - 在这种情况下,快速和肮脏是好的。但是,我曾与一位同时也是设计师的Web开发人员合作,他拒绝使用ASP.NET控件,只使用HTML代码并在需要时添加runat =“server”标签。这更多是因为他想知道他的HTML究竟是如何呈现的,当时无论如何,一些ASP.NET控件都不符合标准。

我坐在中间的某个地方 - 在适当的地方使用HTML,而不是在不适用时。您可以使用CSS control Adapters

对两个世界进行最佳排序

答案 1 :(得分:13)

我真的很欣慰地看到一些意见在这里同意我自己:ASP.NET作为模板语言非常差。

我想反驳一下这里提出的几个专业观点(火热服!):

戴夫沃德提到了身份证的碰撞 - 这是事实,但我处理得有多糟糕。我更倾向于看到xpath或深度css选择器引用的节点,而不是使ID有效无用,除非延迟到像clientID这样的ASP.NET内部 - 它只是让编写CSS和JS变得更加毫无意义。

Rob Cooper谈到控件如何替代HTML,所以一切都很好(释义,请原谅Rob) - 好吧,这不好,因为他们采用了现有的,理解得很好的语言并说“不,你必须做现在我们的方式“,他们的方式非常实施得不好。例如asp:panel在一个浏览器中呈现一个表,在另一个浏览器中呈现一个div!没有文档或执行,登录控件(以及许多其他标记)的标记是不可预测的。你打算如何让设计师针对它编写CSS?

Espo写道如果平台更改了html,控件如何为您提供抽象的好处 - 这显然是循环的(它只是因为平台正在改变而改变,如果我只有我自己的HTML那就不需要而实际上创造了一个问题。如果控件将随着更新而改变,我的CSS应该如何应对?

护理人员会说“是的,但您可以在配置中更改此内容”或谈论覆盖控件和自定义控件。那我为什么要这么做?用于解决其中一些问题的css友好控件包除了它的非语义标记之外什么都没有解决ID问题。

使用webform应用程序开箱即用的MVC(抽象概念,而不是3.5实现)是不可能的,因为这些控件可以紧密绑定视图和控件。传统的网页设计师现在有一个进入门槛,因为他必须参与服务器端代码来实现曾经是CSS和JS的独立领域。我同情这些人。

我非常同意Kiwi的观点,即控件允许某些配置文件的应用程序进行一些非常快速的开发,并且我接受一些程序员发现HTML令人不快的原因,以及ASP.NET的其他部分的优点给你,这需要这些控制,可能值得付出代价。

然而,怨恨失去控制,我觉得处理代码隐藏的类,样式和脚本等事情的模型是一个错误的倒退,我进一步觉得有更好的模板的模型(微格式的实现和这个平台的xslt)虽然用这些替换控件是非常重要的。

我认为ASP.NET可以从LAMP和rails世界中的相关技术中学到很多东西,直到那时我希望能够在最好的情况下使用3.5 MVC。

(抱歉,这太长了&lt; / rant&gt;)

答案 2 :(得分:4)

简短的回答是,除非你有充分的理由,否则你不应该使用标准HTML控件的asp:...版本。

初级开发人员经常会使用这些控件,因为大多数ASP.NET书都涵盖了这些控件,所以假设它们必须更好。他们不是。在这一点上,经过8年的日常ASP.NET开发,我只能想到2到3个案例,其中使用asp:... INPUT控制标准HTML实际上是有意义的。

答案 3 :(得分:2)

关于服务器控件上的ID:您可以通过访问ClientID找到要写入浏览器的实际ID。这样你可以组合服务器端og客户端脚本,仍然没有硬编码_id =“ct100_nav”_

我总是尝试使用包含的控件而不是“黑客”HTML,因为如果稍后有更新或一些改进,我的所有代码仍然可以通过替换框架来工作,我不必更改任何HTML。

希望这有帮助

答案 4 :(得分:2)

@布赖恩, 对!您几乎可以控制所有行为。考虑创建自定义控件(有三种类型)。我最近在我的问题here中对它们进行了概述。

我会强烈建议检查它们,帮助我无止境:)

答案 5 :(得分:1)

我也是在冒险进入ASP.NET并且也遇到过类似的挫折。但是,你很快就会习惯它。你只需要记住,你没有繁琐的HTML制作的原因是因为ASP.NET控件为你做了一切

在某种程度上,您可以控制/调整这些内容,即使这意味着继承控件并从那里调整HTML输出。

我过去必须这样做,某些控件默认情况下没有通过W3C验证,在这里和那里添加一些额外的标记,所以我只需要根据需要进行过度修改和编辑(修复太简单了几分钟) )..

我会说要了解控制系统是如何工作的。然后自己敲几下,这真的帮助我了解最新情况,所以如果我遇到任何问题,我知道该去哪里

答案 6 :(得分:1)

HTML呈现这些ID,因为它的ASP.NET是防止ID冲突的方式。每个容器控件(如主页面或向导控件)都会在其子级ID上添加“ID_”。

对于子弹列表,ListView提供了一个很好的中间地带。您仍然可以将其绑定到数据源,但它可以更加严格地控制呈现的HTML。 Scott Gu在这里有一个很好的ListView简介:

http://weblogs.asp.net/scottgu/archive/2007/08/10/the-asp-listview-control-part-1-building-a-product-listing-page-with-clean-css-ui.aspx

答案 7 :(得分:0)

如果ASP.NET添加的ID前缀是您以后使用JS或其他东西访问它们的问题...您有.ClientID属性服务器端。

如果ASP.NET增加了开销,你应该考虑ASP.NET MVC(仍然预览),你可以完全控制发出的html。

我正在转向MVC,因为我不喜欢所有添加的内容....

答案 8 :(得分:0)

我认为这里的大部分答案都是设计师的观点。在一个中小型项目中,似乎是同步代码和CSS / HTML并使它们符合标准且干净的开销。设计师的方法是完全控制渲染的HTML。但是有很多方法可以在ASP.NET中完全控制。对我来说,在aspx / ascx文件中使用所需的HTML是最不可扩展和脏的方法。如果要通过CSS设置控件样式,可以始终通过CssClass属性设置类服务器端。如果你想通过JS访问它们,你可以再次使用正确的ID服务器端发出JS。这提供的唯一缺点是开发人员和设计师必须密切合作。无论如何,在任何大型项目中这都是不可避免的。但ASP.NET提供的优势远远超过这些困难。 尽管如此,如果你想要符合标准的HTML,皮肤支持和其他好东西来控制渲染标记,你总是可以使用第三方控件。

答案 9 :(得分:0)

正如Dave Ward已经提到的那样,“这是ASP.NET防止ID冲突的方法。”

一个非常好的示例是,如果您尝试将控件放在自定义控件中,然后在转发器中使用该自定义控件,那么自定义控件的HTML将为页面多次输出。

正如其他人所提到的,如果您需要访问javascript的控件,请使用ClientScript属性,该属性将允许您访问ClientScriptManager并以这种方式将脚本注册到页面。确保在编写脚本时使用您尝试引用的控件上的ClientID属性,而不是仅仅输入控件的ID。

答案 10 :(得分:0)

如果您想要对渲染的HTML进行过多控制,请转而使用ASP.NET MVC