Привязать данные к повторителю с помощью Ajax - PullRequest
1 голос
/ 13 сентября 2010

Я хочу привязать данные к Repeater по щелчку определенного Button.

. Я могу сделать ajax-запрос через jQuery и вызвать метод для привязки данных, но на странице ничего нет.

Это метод, который я использую для привязки данных к Repeater:

public void BindJobs()
{
    if (RptClientDetails.Items.Count != 0) return;
    RptClientDetails.DataSource = new JobBusiness().GetJobInfoClient(ClientId);
    RptClientDetails.DataBind();
    Response.Write("myresponse");
    Response.End();
}

Вышеупомянутый метод успешно вызывается и данные извлекаются с помощью GetJobInfoClient.Это мой вызов ajax:

function BindJobs() {
    $.ajax({
        type: "POST",
        url: "Client/Default.aspx?action=bindJobs",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            // Do something interesting here.
        }
    });
}

Ответы [ 3 ]

3 голосов
/ 13 сентября 2010

Вы понимаете, что RptClientDetails - это управление на стороне сервера?Когда вы связываетесь с ним при вызове BindJobs, это связывание, но вы не возвращаете сгенерированный HTML.

Вам необходимо вернуть HTML-код ретранслятора после того, как он был связан в вашем AJAX.Затем в вашем обработчике успеха вставьте HTML-код в то место, где вы хотите отобразить Repeater.

Я бы порекомендовал проверить пост Рика Строля о том, как это сделать:

jQuery и ASP.NET Article Part 2

Самым простым способом было бы сбросить AJAX все вместе и использовать UpdatePanel.Просто оберните ваш Repeater и Button UpdatePanel, и вызов будет обработан платформой, и новый HTML будет введен для вас.Он немного тяжелее, чем метод jQuery / AJAX, но требует почти 0 кода.

EG:

<!-- Your other controls -->
<asp:UpdatePanel ID="yourPanel" runat="server">
    <ContentTemplate>
        <!-- Your Repeater HERE -->
        <!-- Your Button HERE and server side make it call your bind -->
    </ContentTemplate>
</asp:UpdatePanel>
<!-- rest of your controls -->

РЕДАКТИРОВАТЬ:

Если вы хотите отобразить элемент управления, чтобы вы могли отправить его обратно в своем ответе, вы можете сделать:

// This will get your Repeaters rendered HTML
StringBuilder sb = new StringBuilder();
StringWriter tw = new StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(tw);
RptClientDetails.RenderControl(hw);
string yourReatersRenderedHtml = sb.ToString();

Затем вы можете вернуть эту строку в вызове AJAX и затем использовать метод успеха, чтобы вставить его вdiv или другой заполнитель.Честно говоря, UpdatePanel гораздо проще, и я бы порекомендовал его, если вы ищете самый простой способ сделать это и не очень беспокоитесь о влиянии на производительность при использовании UpdatePanel.

0 голосов
/ 14 сентября 2010

Возможно, вы захотите попробовать jqGrid , если ваш ретранслятор в настоящее время создает список / таблицу данных.Его очень легко настроить, и он прекрасно работает с вызовами ajax, которые возвращают JSON (и, возможно, другие форматы, такие как XML).По моему опыту, в результате получается более производительный и более понятный код.

0 голосов
/ 13 сентября 2010

Вы должны использовать UpdatePanel вместо jQuery ajax.

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