miércoles, 5 de octubre de 2011

ASP.NET - Page Methods que devuelven un valor o contenido string

Me preguntaron cómo hacía para lograr que un Page Method retorne una cadena string desde el lado del servidor.

Ya hemos tratado este interesante tema de Page Methods, pero no habíamos demostrado cómo retornar un string, ahora vamos a hacerlo.

Para el caso, vamos a enviar a través del Page Method un valor numérico, y como valor de retorno traeremos una lista desordenada de elementos, la cual será enviada como un string al lado del cliente.

Empecemos. Recuerden que el proyecto debe tener:

1.- la referencia a System.Web.Extensions
2.- un ScriptManager con la propiedad EnablePageMethods=”true”
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Page Methods que retornan un string</title>
    <script type="text/javascript">
    function BulletedList(quantity) 
    {
    PageMethods.GetBulletedList(quantity, MyMethod_Result, onSucceed, onError);
    }

    function MyMethod_Result(StringDeRespuesta) {

        var Label1 = document.getElementById("<%= Label1.ClientID %>");
        Label1.innerHTML = StringDeRespuesta;
    }

    function onSucceed(result) {
    }

    function onError(result) {
        alert(result.get_message());
    }
    </script>
</head>
<body>
   <form id="form1" runat="server">
   <asp:ScriptManager ID="ScriptManager1" EnablePageMethods="true" runat="server">
   </asp:ScriptManager>
    <asp:HyperLink ID="HyperLink1" NavigateUrl="javascript:;" 
        onclick="BulletedList(10);" runat="server">
            Obtener contenido HTML desde el servidor
    </asp:HyperLink>
    <p>
        <asp:Label ID="Label1" runat="server"></asp:Label>
    </p>
    </form>
</body>
</html>
Luego, del lado del código VB.NET:
    <System.Web.Services.WebMethod()> _
    Public Shared Function GetBulletedList(ByVal quantity As Integer) As String
        Dim p As New Page
        Dim oStringWriter As New System.IO.StringWriter()
        Dim oHtmlTextWriter As New System.Web.UI.HtmlTextWriter(oStringWriter)

        Dim ul As New BulletedList
        For i As Integer = 1 To quantity
            ul.Items.Add("Este es el elemento #: " & i)
        Next

        ul.RenderControl(oHtmlTextWriter)

        Return oStringWriter.ToString()

    End Function
Como pueden ver… hay un Page Method que crea una lista desordenada, a la cual se le van añadiendo elementos dinámicamente… y finalmente devuelve la lista pero convertida en un string.
Lo que hace posible que el contenido sea devuelto es el 2do parámetro que recibe el PageMethod en la llamada javascript:
PageMethods.GetBulletedList(quantity, MyMethod_Result, onSucceed, onError);
Eso es todo, espero que les sea de utilidad Guiño

No hay comentarios.: