AJAX.NET Asnycpostback не работает - PullRequest
0 голосов
/ 11 октября 2011

Я создал приложение 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";
    }
}

Ответы [ 5 ]

2 голосов
/ 16 октября 2011

Я нашел решение ниже:

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

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

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

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

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

0 голосов
/ 13 октября 2011

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

Проверьте, установлена ​​ли на вашей машине правильная сборка. В вашем случае вам понадобится ASP.NET AJAX 1.0, который можно скачать здесь: http://www.microsoft.com/download/en/details.aspx?displaylang=en&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 - это нормальное поведение, если нажать на кнопку!

0 голосов
/ 14 октября 2011

Я предполагаю, что вы должны правильно установить все, так как ваш сайт работает. Если что-то не так с вашими значениями 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";
}
0 голосов
/ 12 октября 2011

Всякий раз, когда у вас возникают проблемы с такими вещами, лучше всего создать новый проект с той же версией .Net и посмотреть, что он вставит в ваш 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"/>
...