AJAX.NET Asnycpostback не работает

#asp.net #ajax #ajax.net

#asp.net #ajax #ajax.net

Вопрос:

Я создал AJAX.NET приложение, и я запускаю свое приложение с помощью <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> , но теперь мой следующий пример кода отправляется обратно при каждом нажатии кнопки. Мне нужно, чтобы действие выполнялось без перезагрузки страницы.

Далее следует код.

 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Async="true" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
        </Triggers>
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>


using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = "Hello";
    }
}
  

Комментарии:

1. Почему вы добавляете версию 1 System.Web. Сборка пользовательского интерфейса? Для этого необходимо использовать как минимум 2.0.

2. Я установил версию # 2.0, но какой номер версии должен быть записан для .NET FW2.0? это 1.0.61025.0, не так ли?

3. Я пробовал 2.0.0, но компилятор останавливает программу на этой строке.

4. Что вы упоминаете, когда говорите «отправка обратно при каждом нажатии кнопки»? Означает ли это, что каждый раз, когда вы нажимаете кнопку, выполняется метод Page_Load? Если это так, это нормальное поведение.

5. @YuriyRozhovetskiy — Я не заметил, выполняется Page_Load или нет, но при каждом нажатии страница перезагружается. Мне не нужно, чтобы страница перезагружалась по щелчку.

Ответ №1:

Я нашел решение следующим образом

  1. Установите набор инструментов Ajax.
  2. Добавьте открытый ключ и номер версии в файл web.config.
  3. Скопируйте и вставьте файлы Ajax dll в папку bin требуемой папки данных.

Комментарии:

1. Это в основном то, что я предложил. Поздравляю с исправлением.

Ответ №2:

Всякий раз, когда у вас возникают проблемы с такого рода вещами, лучше всего просто создать новый проект с той же версией .Подключитесь и посмотрите, что он помещает в ваш web.config.

Для .Net 3.5 это создает следующее:

   <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  

Комментарии:

1. У вас есть инструментарий AJAX? В противном случае вы не сможете использовать это до .Net 3.5.

2. Это этот файл ASPAJAXExtSetup.msi ?? Или, пожалуйста, предоставьте мне ссылку для скачивания. Я искал и не мог найти ни одного.

3. Думаю, я его установил. В противном случае я не могу использовать <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

Ответ №3:

Я взял ваш пример и заставил его работать со следующими шагами:

Проверьте, установлена ли на вашем компьютере правильная сборка. В вашем случае вам понадобится ASP.NET AJAX 1.0, который можно скачать здесь: http://www.microsoft.com/download/en/details.aspx?displaylang=enamp;id=883

Это установит сборку System.Web.Extensions 1.0.61025.0 в ваш GAC.

Обратитесь к сборке на вашем веб-сайте.

Проверьте, имеет ли ваш web.config хотя бы следующую конфигурацию:

 <system.web>
    <compilation debug="true">
        <assemblies>
            <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </assemblies>
    </compilation>

    <pages>
       <controls>
           <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
       </controls>
    </pages>

    <httpHandlers>      
       <remove verb="*" path="*.asmx"/>
       <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
       <add verb="GET" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler" validate="false"/>      
    </httpHandlers> 

     other stuff

</system.web>
  

Код моей страницы:

 public partial class WebForm1 : System.Web.UI.Page
{        
    protected void Page_Load(object sender, EventArgs e)
    {            
    }

    protected void button1_click(object sender, EventArgs e)
    {
        Label1.Text = "Hello";
    }
}
  

Файл конструктора моей страницы:

 public partial class WebForm1 {        
    protected global::System.Web.UI.HtmlControls.HtmlForm form1;       
    protected global::System.Web.UI.ScriptManager ScriptManager1;       
    protected global::System.Web.UI.UpdatePanel UpdatePanel1;       
    protected global::System.Web.UI.WebControls.Label Label1;      
    protected global::System.Web.UI.WebControls.Button Button1;
}
  

Вот и все. Как сказал Юрий Рожовецкий: выполнение page_load — это нормальное поведение, если вы нажмете на кнопку!

Ответ №4:

Я предполагаю, что у вас должно быть все установлено правильно, поскольку ваш сайт запущен. Если бы что-то было не так с вашими значениями web.config или если у вас не был установлен AJAX Toolkit, ваш код взорвался бы.

Теперь вы сказали, что при нажатии кнопки страница перезагружается, и я предполагаю, что вы имеете в виду, что страница выполняет полную обратную отправку.

Чтобы сузить список возможностей, вот несколько вещей, которые нужно попробовать:

  1. Поскольку пример содержит только метку и кнопку, вам не нужно указывать какие-либо триггеры в UpdatePanel. Без указания каких-либо триггеров UpdatePanel будет считать, что все, что содержится внутри, будет использовать AJAX;
  2. В диспетчере сценариев установите EnablePartialRendering значение true
  3. Я заметил в вашем примере, что имя файла не соответствует коду, от которого вы наследуете. Это не должно иметь большого значения, но я бы изменил объявление класса, чтобы отразить имя файла в коде, просто чтобы убедиться.
  4. Вы используете CodeFile свойство в директиве страницы. Вместо этого вы должны использовать CodeBehind свойство, поскольку именно оно используется в более поздних версиях ASP.NET .

Вот тестовый пример, который работает так, как ожидалось:

ASPX:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs" Inherits="_Default" %>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 
    </ContentTemplate> 
</asp:UpdatePanel>
  

Ошибка с кодом:

 protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = "testing";
}
  

Ответ №5:

Пожалуйста, скачайте ajax control toolkit отсюда..

и зарегистрируйте его поверх страницы aspx, как показано ниже <%@ Register Assembly=»AjaxControlToolkit» Namespace=»AjaxControlToolkit» TagPrefix=»cc1″ %>

используя tagprefix, добавьте свой элемент управления ajax, протестируйте его еще раз и сообщите мне о своих результатах.

Спасибо, Арун.