【问题标题】:New asp "showat" attribute required inconsistently in VS2010. Why?在 VS2010 中不一致地需要新的 asp“showat”属性。为什么?
【发布时间】:2012-03-17 04:21:34
【问题描述】:

当我在 Visual Studio 2010 中使用 T4 模板生成代码时,当我尝试编译时,我的每个 asp 控件都会出现以下错误:

控件“ddState”缺少必需的属性“showat”。

在以前的 .NET 版本中,我从未遇到过此错误。此外,当我通过拖放手动构建页面时,我不会收到此错误,当我自己输入控制文本时也不会收到此错误。当我生成代码时,我必须手动将showat="client" 添加到我的标签中,以使编译器满意。据我了解,我不必明确指定此标签。以下:

<asp:dropdownlist id="ddState" runat="server" showat="client" />

解决问题。为什么我必须将其添加到生成的代码中而不是其他时候?

(这是一个 VS-2010 网络表单项目,使用 VB,以防万一。)

【问题讨论】:

  • 我个人认为这两个强制属性是白痴。你猜怎么着;他们将在下一个版本中添加更多内容!我听说他们计划至少添加 donot="crash",甚至可能更多。
  • VS2010 intelli-sense 有showat 的选项吗?
  • @Matti 同意! ASP 控件上的runat 每次都输入是愚蠢的,它还能在哪里运行?但是将runat=server 标记到普通的 HTML 表格/行/单元格上是非常好的。
  • 我希望看到donot="crash" 属性,但根据我的经验,它与Team Foundation Server 完全不兼容!
  • 我的 Visual Studio (beta2) 没有提供智能感知。我猜发布版本会。

标签: asp.net .net vb.net visual-studio-2010


【解决方案1】:

显然 .NET 5 或这些超级服务包中的另一个将允许称为目标渲染的东西。它最初旨在仅在 web 表单的上下文中使用,但我最近听说在 MVC(使用一些帮助程序类)和使用 WCF 的服务中会有一些奇特的方式来使用它。它可以很好地与动态数据一起工作,但与它的耦合非常松散;您可以完全独立地使用其中一个。如果你用某些标签配置你的动态数据,你可以在客户端等上构建它。

现在,只需将showat="client" 放入所有标签中,一切都很好。这应该是隐含的默认值,但我听说过 IDE 似乎需要它的情况。在未来中,showat="client" 无论如何都将是最安全的设置,在 99.9% 的情况下都能提供预期的行为。

【讨论】:

  • 我想这就是我最终要做的事情。事实上,我现在就这样做,这样我的类就可以编译了。我仍然希望有人知道为什么。一方面,我永远无法回答为什么asp 控件 需要runat 标记。它总是惹恼我。所以showat 让我很烦。
【解决方案2】:

这在 VB 中是必需的,但不是 C#,这就是为什么有时它似乎没有必要。更具体地说,C# 编译器会自动将 showat=client 的等价物放入 IL 中,除非您指定 showat 目标 client

【讨论】:

  • 但是当我手动构建页面时,它不是必需的。也许当您在 C# 中使用 T4 构建时,您会遇到同样的问题。你试过吗?
  • 不,事实并非如此,因为我们已经在我的商店中使用了 VS2010 测试版中的 T4。我们不需要任何标签。
【解决方案3】:

"showat='client'" 目前应该对您的编码影响不大。它的主要目的是用于未来的 WCF 输出目标,他们希望向后兼容。目前,唯一可能的值是“client”,但将来会有其他可能的值允许预渲染缓存值,并且显然“推送”输出到服务。我在上次代码营中看到的示例是您可以推送到(可能)同一站点的服务以及客户端计算机,用于日志记录/调试目的。你会有类似的东西(使用你的例子):

<asp:dropdownlist id="ddlCP" runat="server" showat="client, logService" />

。 . .然后渲染将转到您的日志文件。或者,对于您的会话提供者(如果您有多个 Web 服务器并正在实现共享会话提供者)等。我认为上面的 logService 必须在 web.config 或其他内容中定义。

【讨论】:

  • 这太酷了。我可以看到它如何与我期待使用的动态数据一起工作。但是,您知道为什么编译器(至少是 vb 编译器)有时需要显式声明属性而不是其他时间吗?
【解决方案4】:

当您使用 IDE 添加控件时,检查 VB 是否在 Web 表单设计器页面中执行任何操作。我不确定VB如何插入隐式标签。但这将是 T4 模板会错过的东西,只是一个想法......

【讨论】:

    【解决方案5】:

    同意我的 VS2010 为您解决了这个问题。然后您可以完全删除标签。我建议升级。 599 美元的升级成本很划算。否则,请在所有标签中添加 showat="client"。我认为 Rising Star 做对了,虽然我还没有测试过。

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多