2011-01-14 7 views
7

Zasadniczo, mam obsługę użytkownika ajax asp.net włączone, a teraz chciałbym po prostu zwrócić prostą wartość ciągu, które mają być używane w niektórych js, które uruchamiam po żądanie ajax jest zrobione.Zwracanie wartości z kodu do asp.net ajax endrequest

Używam metody endrequest, którą już skonfigurowałem do obsługi wyjątków, która działa dobrze. Ale czy nie ma sposobu, aby po prostu zwrócić wartość ciągu?

Najpierw myślałem, że mogę to zrobić poprzez Response.Write(); ale args.get_response() nie podoba się, gdy robisz to w sposób widoczny - czy ktoś może wskazać mi właściwy kierunek?

Dzięki!

Odpowiedz

11

Możesz użyć metody ScriptManager.RegisterDataItem z Sys.WebForms.PageRequestManager. Rozważmy następującą stronę testową, która po kliknięciu przycisku rejestruje pozycję danych z menedżerem skryptu i po stronie klienta to obsługujący endrequest i dostać ten element danych,

<%@ Page Language="C#" AutoEventWireup="true" Inherits="WebApplication1._Default" %> 

<script runat="server"> 
    protected void btTest_Click(object sender, EventArgs e) 
    { 
     ScriptManager1.RegisterDataItem(btTest, "Your value to pass to the client"); 
    } 
</script> 

<!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="upTest" runat="server"> 
      <ContentTemplate> 
       <asp:Button ID="btTest" runat="server" Text="Click Me" OnClick="btTest_Click" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </div> 
    </form> 
</body> 
<script language="javascript" type="text/javascript"> 
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); 

    function endRequestHandler(sender, args) { 
     var dataItems = args.get_dataItems()['<%= btTest.ClientID %>']; 
     if (dataItems != null) 
      alert(dataItems); 
    } 
</script> 
</html> 
-1

Może ja nie rozumiem problemu, ale co usercontrol miał do czynienia z tymi dodatkowymi wywołaniami js? Po prostu renderujesz js ze sterowania użytkownika?

W każdym razie, IMO Powinieneś użyć programu ASP.NET Web Handler (* .ashx) lub HttpHandler, aby zwrócić wartość ciągu i wywołać ten moduł obsługi z dodatkowym js.