我正在研究 ASP.NET(C# - 我知道这对于这个特定问题并不重要,但全面披露等等),虽然我喜欢 asp:- 风格的控件让我省去了很多繁琐的 HTML 制作工作,我经常对某些行为感到沮丧。昨晚我在使用母版页时遇到了一个问题:我的 <asp:BulletedList ID="nav">, ,当转换为 HTML 时,变成 <ul id="ct100_nav">.

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

我知道,当您依赖框架来接管一些繁琐的职责时,您必须接受一定数量的“约定优于配置”,但这些情况下的“约定”并不是任何既定的约定,而是不必要的额外内容。我知道 为什么 ID 添加了前缀,但我应该能够调整并关闭类似的功能,特别是因为,作为一名 Web 标准传播者,我无论如何都不会在单个页面中重复 HTML id。

所以这里的问题是针对那些比我更有经验的 ASP.NET 开发人员:根据您开发和部署应用程序的经验,您如何利用这些控制?您是否发现自己又求助于硬编码 HTML?你用混合物吗?我不想围绕这些控件中的特殊怪癖来设计我的 HTML,但是,如果可能的话,我希望尽可能地利用它们。

男孩该做什么?

有帮助吗?

解决方案

亲自,

我认为标准 ASP.NET 控件非常适合内部使用 - 在这种情况下快速和肮脏是好的。但是,我曾经与一位 Web 开发人员一起工作,他也是一名设计师,他拒绝使用 ASP.NET 控件,只使用 HTML 编写代码,并在需要时添加 runat="server" 标记。这更多是因为他想确切地知道他的 HTML 将如何呈现,而且无论如何,当时某些 ASP.NET 控件无法呈现为符合标准。

我处于中间位置——在适当的时候使用 HTML,在不适当的时候不使用 HTML。您可以两全其美 CSS 控制适配器

其他提示

事实上,看到这里的一些观点与我自己的观点一致,我感到很欣慰:ASP.NET作为模板语言是很差的。

我只想反驳这里提出的一些观点(穿上火焰服!):

戴夫·沃德 (Dave Ward) 提到了 ID 冲突 - 这是事实,但我的处理方式非常糟糕。我更希望看到 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。

(抱歉这么久了</rant>)

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

初级开发人员经常沉迷于使用这些控件,因为大多数 ASP.NET 书籍都介绍了这些控件,因此人们认为它们一定更好。他们不是。到目前为止,经过 8 年的日常 ASP.NET 开发,我只能想到 2 或 3 个使用 asp 确实有意义的情况:...对标准 HTML 的 INPUT 控制。

至于服务器控件上的 ID:您可以通过访问ClientID找到将要写入浏览器的实际ID。这样您就可以结合服务器端和客户端脚本,并且仍然不必硬编码 _id="ct100_nav"_

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

希望这可以帮助

@brian,是的!你几乎可以控制所有的行为..考虑创建自定义控件(共有三种类型)。我最近在我的问题中概述了它们 这里.

我会 强烈地 建议检查一下,对我帮助无穷:)

我也在探索 ASP.NET,也遇到过类似的挫折。不过,你很快就会习惯的。你只需要记住, 您无需进行繁琐的 HTML 制作的原因是 ASP.NET 控件为您完成了这一切.

在某种程度上,您可以控制/调整这些东西,即使这意味着继承控制并调整 HTML 输出。

过去,我不得不这样做,某些控件默认情况下通过在各处放置一些额外的标记而未通过 W3C 验证,因此我只是根据需要进行覆盖和编辑(实际上需要几分钟的修复)。

我想说的是了解控制系统是如何工作的。然后自己把一些东西放在一起,这确实帮助我了解了幕后发生的事情,所以如果我遇到任何问题,我知道该去哪里。

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

如果 ASP.NET 添加的 ID 前缀对您稍后使用 JS 或其他方式访问它们来说是一个问题......您有 .ClientID 属性服务器端。

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

我正在转向 MVC,因为我也不喜欢添加所有这些东西......

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

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

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

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

如果您想对渲染的 HTML 进行更多控制,请查看 ASP.NET MVC 反而。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top