Возврат значений из кода в asp.net ajax endrequest - PullRequest
7 голосов
/ 14 января 2011

По сути, у меня есть пользовательский контроль asp.net с поддержкой ajax, и теперь я хотел бы просто вернуть простое строковое значение, которое будет использоваться в некоторых файлах js, которые я запускаю после выполнения запроса ajax.

Я возился с методом endrequest, который я уже настроил для использования при обработке исключений, который работает нормально. Но нет ли способа просто вернуть строковое значение?

Сначала я подумал, что смогу сделать это с помощью Response.Write (); но args.get_response () не нравится, когда вы делаете это явно - кто-нибудь может указать мне правильное направление?

Спасибо!

Ответы [ 2 ]

11 голосов
/ 14 января 2011

Вы можете использовать метод ScriptManager.RegisterDataItem с Sys.WebForms.PageRequestManager. Рассмотрим следующую тестовую страницу, которая при нажатии кнопки регистрирует элемент данных в диспетчере сценариев, а на стороне клиента обрабатывает запрос и получает этот элемент данных:

<%@ 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>
0 голосов
/ 14 января 2011

Может быть, я не понимаю вашу проблему, но какое отношение пользовательский контроль имел к этим дополнительным вызовам js? Вы просто рендеринг JS из пользовательского контроля?

В любом случае, IMO Вы должны использовать ASP.NET Web Handler (* .ashx) или HttpHandler, чтобы возвращать строковое значение и вызывать этот обработчик с этим дополнительным js.

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