Как совместить Script# и веб-элементы управления?

В настоящее время у меня есть проект веб-приложения в VS2010. Каждый элемент управления (в файлах *.ascx) содержится в собственной отдельной папке вместе с веб-службами, используемыми этим элементом управления (в файлах *.asmx), и объектом javascript, используемым для управления им (в файлах *.js). Таким образом, макет проекта выглядит примерно так:

WebApp/
  WebControl1/
    WebControl1.ascx
      WebControl1.ascx.cs
      WebControl1.ascx.designer.cs
    WebControl1.asmx
      WebControl1.asmx.cs
    WebControl1.js
  WebControl2/
    ...
  Global.asax
  Default.aspx
    Default.aspx.cs
    Default.aspx.designer.cs
  ...

Проект расширяется, и я хочу обновить и заменить файлы .js с помощью Script#. Я хотел бы сохранить эту структуру, но, насколько я могу судить, нет возможности смешивать файлы Script# и обычные файлы C# в одном проекте.

Я просмотрел файл Readme PDF на сайте Script# и загрузил пример PhotoDemo, но не могу найти примеров использования Script# наряду с веб-элементами управления. Я попытался добавить в проект шаблон "Поддержка сценариев", а затем добавить шаблоны классов и страниц из списка шаблонов Script#, но оба они обрабатываются как обычные файлы исходного кода C#.

Я использовал рефлектор для просмотра бинарных файлов mscorlib, System.Web, ScriptSharp.Web, ScriptSharp.VisualStudio, ScriptSharp и Script.Windows, установленных Script#, и не смог найти ничего, что позволило бы такое поведение.

Кто-нибудь реализовал что-то подобное или есть какие-то дополнительные подсказки?

Единственный способ, которым мне удалось использовать Script # на данный момент, - это иметь отдельный проект Script # и иметь вывод для файлов javascript внутри моего веб-приложения. Это работает, но далеко от идеала.

Спасибо, что уделили время,
Хью.


person Hugh Powell    schedule 21.01.2011    source источник


Ответы (1)


Недавно я сделал решительный шаг и почти полностью прекратил использование веб-элементов управления. Я компилирую управляющий HTML-код в вывод Script# и вместо обратных передач делаю вызовы веб-службы с помощью WCF. Я думаю, вы коснулись этого, но, на мой взгляд, попытки синхронизировать дизайн и логику того, что представляет собой единую концептуальную единицу, слишком утомительны, если дизайн и логика находятся в двух отдельных проектах.

Мои макеты проектов теперь выглядят примерно так:

WebApp/
  Pages/
    Home.aspx
    [etc]
  Services/
    MainService.svc

ScriptSharp/
  UI/
    Widget1.html
    Widget1.html.cs
    Widget2.html
    Widget2.html.cs

Я обманываю систему, устанавливая файлы ".html" как "Compile", превращая их содержимое в константы в выводе Script#. В моих файлах ".html.cs" у меня есть то, что вы ожидаете (обработчики событий для щелчка, изменения и т. д.), за исключением того, что логика пользовательского интерфейса теперь использует jQuery больше, чем раньше (хорошая вещь).

Если вам интересно, вы можете ознакомиться с моим проектом Sharp UI, который занимается разбором html-констант. и обработка каждого HTML-фрагмента, как если бы он был (клиентской версией) пользовательского веб-элемента управления.

person DuckMaestro    schedule 26.03.2011