Использование Visual Studio для создания страниц без кода aspx - PullRequest
3 голосов
/ 09 марта 2009

Я хочу создать свой собственный «код позади», как страницы, чтобы я мог иметь HTML в файле HTML и код в файле CS, но иметь возможность Intellesense для токенов в файле HTML. (я знаю, что это делает класс страниц .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 таким образом, чтобы его члены автоматически создавались и, в частности, отображались в Intellesense при добавлении токенов в файл .html?

Я знаю, что .net в настоящее время делает это, создавая файл designer.cs и в основном создает класс со всеми элементами со страницы по ходу дела, и это будет работать нормально, но как я могу заставить Visual Studio генерировать это раньше? компилирование так, чтобы оно отображалось в Intellesense. Спасибо!

Разъяснение Я пока не использую это как обработчик, я хочу использовать это, чтобы фрагменты HTML с токенами можно было использовать в коде как объект со свойствами. так почти как пользовательский элемент управления. Я думаю, что мне нужно сделать, это создать надстройку VS, которая ждет от меня ввода токенов в файл .html, а затем автоматически создает файл .cs с членами для каждого токена.

Ответы [ 5 ]

2 голосов
/ 09 марта 2009

Во-первых, на странице ASPX не так много раздувания, если вы не хотите раздувать. Вы можете избавиться почти от всего, кроме тега директивы @ Page. Вы также можете отключить viewstate, если вы не хотите раздуваться на стороне клиента, поэтому я не вижу причин изобретать велосипед.

Если вы хотите гораздо меньше раздувать, рассмотрите ASP.NET MVC. Если я правильно угадываю, вы увидите RTM на MIX, так как Microsoft любит выпускать вещи на конференциях. Если нет, то это RC2, поэтому RTM не так уж далеко. В ASP.NET MVC страницы ASPX могут быть очень тонкими, так как они являются просто представлениями.

Если вы хотите заняться этим по-своему, вы можете делать то, что вы хотите, с обработчиками HTTP для обработки типа. Я бы не оставил это как .htm или .html, так как вы сделаете это так, чтобы вы не могли обслуживать стандартный файл .html на вашем сервере, что не очень хорошо. Это решает проблему обработки, которая составляет только половину вашей битвы.

Я не уверен, что лучший способ справиться с Intellisense. Одним из способов является ссылка, как показано в блоге Стагнера: http://weblogs.asp.net/joestagner/archive/2008/05/12/add-custom-javascript-intellisense.aspx

Я не пробовал это с пользовательскими расширениями, хотя оно должно работать. Вы также можете создать свой собственный XSD (XML) файл, аля: http://vyasashutosh.blogspot.com/2007/05/providing-custom-intellisense-in-vsnet.html

Лично я бы использовал модель ASPX и прореживал то, что вам не нужно. Вы можете даже ударить шаблоны, если хотите, чтобы вы могли делать это на каждой странице. Вы не можете избавиться от директивы @ page, но если это слишком много, я не уверен, что ASP.NET - это модель, с которой вы хотите работать.

1 голос
/ 09 марта 2009

Попробуйте MVC Framework .

иначе используйте PHP, DJANGO, ROR или какой-либо другой фреймворк, который полностью поддерживает шаблоны.

1 голос
/ 09 марта 2009

Не то чтобы я с вами согласился, но вы можете создавать защищенные переменные в коде и использовать их так, как вы пытаетесь.

Под кодом:

protected string myVar1 = "Hello World"

На HTML:

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

Опять же, я просто хочу прояснить, что работа таким образом идет на шаг назад, и я советую против этого.

0 голосов
/ 15 июня 2010

Или попробуйте использовать spark для asp.net, он пытается убрать необходимость встроенных тегов сценария с помощью разметки xml IE

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

становится чем-то вроде

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

обратите внимание, мой пример лучше дерьма и неправильн, но вы поняли идею. Google это ... искра

0 голосов
/ 09 марта 2009

Полагаю, если вы унаследуете свой класс от абстрактного UI.TemplateControl, вы получите эту функциональность. Я просматриваю интерфейсы, чтобы увидеть, получит ли это простая реализация конкретного интерфейса, но, думаю, если вам нужна эта функциональность, это то, что вам нужно сделать.

...