Избавляемся от Microsoft AJAX - PullRequest
2 голосов
/ 18 ноября 2009

Мы написали несколько элементов управления, используя Microsoft AJAX (класс cs + класс js). Теперь я думаю о том, чтобы избавиться от него (просто используйте jQuery), так как он раздут, и мы не используем UpdatePanel. Мой вопрос: как я должен изменить свои элементы управления? Прямо сейчас они реализуют IScriptControl, который использует функции Microsoft AJAX (если я правильно понимаю, классы ScriptManager и ScriptControlDescriptor). Что использовать вместо этого?

РАЗЪЯСНЕНИЕ. Мне не нужно больше библиотек JavaScript - я уже использую jQuery и хотел бы свести к минимуму дополнительные включения (если они не очень маленькие). Что мне нужно, так это замена ScriptManager и интерфейса IScriptControl. Вещи как:

  1. Регистрация ссылок на скрипты (и не дублируя их).
  2. Создание класса сценария, связанного с элементом управления.
  3. Привязка моего класса к элементу DOM (каков наилучший способ сделать это, используя jQuery, кстати?).
  4. Инициализация полей класса JS.

Ответы [ 5 ]

2 голосов
/ 17 марта 2011

С другой стороны, вы можете попробовать кометный подход ajax, отметьте эти образцы.

1 голос
/ 26 ноября 2009

Хорошо, я наконец-то закончил.

  1. В итоге мы создали потомок Page с некоторым кодом для замены менеджера скриптов (см. Ниже). Мы вызываем его из метода OnPreRender элемента управления, используя свойство Page элемента управления. Спасибо ребятам из http://dj.codeplex.com/ за пример того, как это сделать.

2, 3, 4. Мы использовали метод jQuery.data для привязки экземпляров классов сценариев к элементам DOM. Мы выполняем код создания, инициализации и связывания с помощью метода jQuery.ready. Этот код добавляется для управления в его метод Render с использованием метода AddScript (см. Ниже). Возможно, позже мы будем использовать JavaScriptSerializer для передачи значений из элемента управления C # в классы javascript, но в данный момент мы делаем это вручную, передавая параметры конструктору классов javascript.

HashSet<string> scriptReferences = new HashSet<string>();
HashSet<string> cssReferences = new HashSet<string>();
List<string> styles = new List<string>();

public void AddScriptReference(string url, bool resolve)
{
    string realUrl = url;
    if (resolve)
        realUrl = ResolveClientUrl(url);

    if (!scriptReferences.Contains(realUrl))
    {
        scriptReferences.Add(realUrl);
        Header.Controls.Add(
            new LiteralControl(
                "<script type='text/javascript' src='" +
                realUrl + "'></script>"));
    }
}

public void AddCssReference(string url)
{
    if (!cssReferences.Contains(url))
    {
        cssReferences.Add(url);
        HtmlLink link = new HtmlLink();
        //link.Href = ResolveClientUrl("~/jQuery-ui/css/ui-lightness/jquery-ui.css");
        link.Href = url;
        link.Attributes.Add("type", "text/css");
        link.Attributes.Add("rel", "stylesheet");
        Header.Controls.Add(link);
    }
}

public void AddCssStyle(string style)
{
    styles.Add(style);
}

protected override void OnPreRenderComplete(EventArgs e)
{
    base.OnPreRenderComplete(e);
    Header.Controls.Add(
        new LiteralControl(
            "<style type='text/css'>" + styles.Join("\n") + "</style>"
        )
    );
}

public static void AddScript(HtmlTextWriter writer, string script,
    bool executeWhenReady)
{
    writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/javascript");
    writer.RenderBeginTag(HtmlTextWriterTag.Script);
    if (executeWhenReady)
    {
        writer.Write("$(function(){\n");
    }
    writer.Write(script);
    if (executeWhenReady)
    {
        writer.Write("});\n");
    }

    writer.RenderEndTag();
}
0 голосов
/ 18 ноября 2009

Вас может заинтересовать более легкая функция условного рендеринга в следующем выпуске .NET4 (вместе с Visual Studio 2010)

http://msdn.microsoft.com/en-us/magazine/ee335716.aspx

Если вы можете подождать, это может быть жизнеспособным решением для вас.

0 голосов
/ 19 ноября 2009

Я не уверен, что вам нужна замена IScriptControl и Scriptmanager, если вы хотите строго использовать jQuery. Я рекомендую вам посмотреть http://blog.jeremymartin.name/2008/02/building-your-first-jquery-plugin-that.html'>tutorials на создание плагинов jQuery.

0 голосов
/ 18 ноября 2009

jQuery и jQuery UI очень мощные. Но у вас также есть доступ к Moo Tools и Prototype. Какие инструменты в MS AJAX вы используете? Есть почти что-то сопоставимое в предложениях с открытым исходным кодом без MS по всем направлениям. Они просто требуют немного больше труда с вашей стороны для реализации. Вы также можете посмотреть на элементы управления Telerik и Syncfusions. Telerik предлагает несколько предложений ajax с открытым исходным кодом для ASP.NET MVC, которые можно довольно легко преобразовать в веб-формы ASP.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...