当我在Visual Studio 2010中使用T4模板生成代码时,在尝试编译时,每个asp控件都会出现以下错误:
控制“ddState”缺少必需属性“showat”。
我以前从未在.NET的早期版本中遇到此错误。此外,当我通过拖放手动构建页面时,不会出现此错误,当我自己键入控件文本时也不会得到它。当我生成代码时,我必须手动将showat="client"
添加到我的标记中,以便编译器满意。据我所知,我从来没有明确指定这个标签。以下内容:
<asp:dropdownlist id="ddState" runat="server" showat="client" />
解决了这个问题。为什么我必须将其添加到生成的代码中,而不是其他时间?
(这是一个VS-2010 webforms项目,使用VB,以防万一。)
答案 0 :(得分:3)
显然,.NET 5或其他一个超级服务包将允许一些名为目标呈现的东西。它最初只是用于webforms的上下文中,但我最近听说过在MVC(使用一些帮助类)和使用WCF的服务中使用它会有一些奇特的方法。它可以很好地与动态数据配合使用,但与它非常松散耦合;你可以完全独立地使用其中一个。如果使用某些标记配置动态数据,则可以在客户端等上构建它。
对于 now ,只需将showat="client"
放入所有代码中,一切都很好。这应该是隐式默认值,但我听说过IDE似乎需要它的情况。在 future 中,showat="client"
无论如何都将是最安全的设置,在99.9%的情况下给出预期的行为。
答案 1 :(得分:2)
这在VB中是必需的,但不是C#,这就是为什么有时似乎没有必要。更具体地说,除非您指定 showat 目标而不是 showat=client
,否则C#编译器会自动将等效的client
放入IL中。
答案 2 :(得分:2)
“showat ='client'”目前对您的编码影响不大。它的主要目的是为了未来的WCF输出目标,他们希望向后兼容。目前,唯一可能的值是“客户端”,但将来会有其他可能的值允许预先呈现缓存值,并显然“推送”输出到服务。我在最后一个代码阵营看到的例子是你可以在同一个站点和客户端机器上推送服务,以便进行日志记录/调试。你会有类似的东西(使用你的例子):
<asp:dropdownlist id="ddlCP" runat="server" showat="client, logService" />
。 。 。然后渲染将转到您的日志文件。或者,对于您的会话提供者(如果您有多个Web服务器并且正在实现共享会话提供程序)等等。我认为上面的logService
必须在web.config中定义。
答案 3 :(得分:1)
使用IDE添加控件时,检查Web窗体设计器页面中的VB是否执行任何操作。我不确定VB如何插入隐式标记。但那将是T4模板错过的东西,只是一个想法......
答案 4 :(得分:1)
同意我的VS2010为您解决了这个问题。然后,您可以完全删除标签。我建议升级。 599美元的升级费用很好。否则,请在所有标记中添加showat =“client”。我认为新星有一个正确,但我还没有测试过。