使用Visual Studio制作非aspx代码隐藏页面

时间:2009-03-09 16:57:28

标签: c# .net visual-studio intellisense

我希望像页面一样构建自己的“代码隐藏”,以便我可以在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文件,其中包含每个标记的成员。

5 个答案:

答案 0 :(得分:2)

首先,如果你不想要膨胀,ASPX页面中没有太大的膨胀。除了@Page指令标记之外,你可以除掉几乎所有东西。你可以关闭viewstate,如果你不想在客户端膨胀,所以我认为没有理由重新发明轮子。

如果你想要更少的膨胀,请考虑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是你想要使用的模型。

答案 1 :(得分:1)

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

代码背后:

protected string myVar1 = "Hello World"

在Html:

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

同样,我只想说清楚,以这种方式工作是退一步,我建议反对。

答案 2 :(得分:1)

尝试MVC framework

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

答案 3 :(得分:0)

我相信如果你从抽象的UI.TemplateControl继承你的类,你将获得这个功能。我正在浏览界面,看看是否只是简单地实现一个特定的界面就能得到这个,但是,我猜你是否想要这个功能,这就是你需要做的事情。

答案 4 :(得分:0)

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

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

变得类似

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

请注意我的例子是更好的废话和错误,但你明白了。 google it ... spark