3

我想构建自己的“代码背后”,例如页面,这样我就可以在 HTML 文件中包含 HTML,在 cs 文件中包含代码,但能够为 HTML 文件中的令牌提供 Intellesense。(我知道这就是 .NET 页面类所做的,但我想要更轻松的东西)

EG:在 .html 文件中:

<%@ Directive classname="HTMLSnippet" %>
<html>
   <body>
     <div>[%message%]
   </body>
</html>

并在 .cs 文件中

public class MyClass : HTMLSnippet
{
   public class MyClass () {
      snippet.message = "message goes here"
   }
}

所以我的问题是如何制作 HTMLSnippet 类,以便自动创建它的成员,并在我将令牌添加到 .html 文件时特别显示在 Intellesense 中?

我知道.net目前通过创建designer.cs文件来完成它,并且基本上构建了一个包含页面中所有元素的类,这可以正常工作,但是我怎样才能让Visual Studio在编译之前生成它,以便它出现在 Intellesense 中。谢谢!

澄清 我还没有将它用作处理程序,我想用它来使带有标记的 HTML 片段可在代码中用作具有属性的对象。所以几乎就像一个自定义控件。我认为我要做的是创建一个 VS 加载项,等待我将令牌输入到 .html 文件中,然后它会自动创建一个 .cs 文件,其中包含每个令牌的成员。

4

5 回答 5

2

首先,如果您不想膨胀,那么 ASPX 页面中不会有太多膨胀。除了@ Page 指令标签之外,你几乎可以去掉所有东西。如果您不想在客户端膨胀,您也可以关闭视图状态,所以我认为没有理由重新发明轮子。

如果您想减少臃肿,请考虑使用 ASP.NET MVC。如果我猜对了,你会在 MIX 上看到 RTM,因为微软喜欢在会议上发布东西。如果不是,那就是RC2,所以RTM也不是那么遥远。在 ASP.NET MVC 中,ASPX 页面可以非常薄,因为它们只是视图。

如果您想以自己的方式解决这个问题,您可以使用 HTTP 处理程序来处理类型。我不会将其保留为 .htm 或 .html,因为您将制作它,因此您无法在服务器上提供标准的 .html 文件,这不好。这解决了处理问题,这只是你成功的一半。

我不确定处理 Intellisense 的最佳方法。一种方法是参考,如 Stagner 的博客所示: http ://weblogs.asp.net/joestagner/archive/2008/05/12/add-custom-javascript-intellisense.aspx

尽管它应该可以工作,但我还没有尝试过使用自定义扩展。您还可以创建自己的自定义 XSD (XML) 文件,ala:http: //vyasashutosh.blogspot.com/2007/05/providing-custom-intellisense-in-vsnet.html

就个人而言,我会使用 ASPX 模型并减少不需要的部分。如果您愿意,您甚至可以修改模板,这样您就可以在每个页面上执行此操作。您无法摆脱 @page 指令,但如果它过于臃肿,我不确定 ASP.NET 是否是您希望使用的模型。

于 2009-03-09T17:07:46.450 回答
1

并不是我同意你的观点,但你可以在后面的代码上创建受保护的变量,并按照你尝试的方式使用它们。

在代码后面:

protected string myVar1 = "Hello World"

在 HTML 中:

<html>
   <body>
     <div><%= myVar1 %>
   </body>
</html>

再次,我只想明确表示,以这种方式工作会倒退一步,我建议不要这样做。

于 2009-03-09T17:10:37.050 回答
1

试试MVC 框架

否则使用 PHP、DJANGO、ROR 或其他一些完全支持模板的框架。

于 2009-03-09T17:12:11.400 回答
0

或者尝试使用 spark for asp.net 它尝试通过使用 xml 标记 IE 来消除对内联脚本标签的需要

<% foreach( string key in collectionOfItems.Keys ) %>
<div><% =key %></div>
<% } %>

变成类似的东西

<foreachcollectionOfItems.Keys >
<div>$key</div>
</foreach>

注意我的例子是更好的废话和错误,但你明白了。谷歌它...火花

于 2010-06-14T22:27:56.297 回答
0

我相信如果您从抽象 UI.TemplateControl 继承您的类,您将获得此功能。我正在浏览接口,看看是否只需实现一个特定的接口就可以为您提供此功能,但是,我猜您是否需要此功能,这就是您需要做的。

于 2009-03-09T17:33:27.917 回答