2011-02-10 2 views
0

У меня есть gridview внутри обновленной панели, и у меня есть javascript, который вызывает метод страницы с использованием jquery. Я хотел бы, чтобы метод страницы обновлял gridview на основе параметра, который он получает от вызова ajax.ajax с методом страницы

До сих пор у меня есть следующие:

1) в JavaScript, есть функция, которая вызывает метод страницы:

function GetNewDate(thedateitem) { 

    DateString = (valid json date format that works) 

    $.ajax({ 
     type: "POST", 
     url: "./CallHistory.aspx/ResetDate", 
     contentType: "application/json; charset=utf-8", 
     data: DateString, 
     dataType: "json", 
     success: successFn, 
     error: errorFn 
    }) 
}; 

2) На странице ASPX я имею:

<asp:UpdatePanel ID="MyPanel" runat="server"> 
     <ContentTemplate> 
       <asp:GridView ID="MyGrid"> 

3) В коде позади:

public partial class Pages_CallHistory : System.Web.UI.Page 
{ 
    List<ViewCallHistoryModel> TheCallHistory; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      TheDate = new DateTime(2011, 1, 13); 
      LoadCallHistory(TheDate); 
      MyGrid.Datasource = TheCallHistory; 
      MyGrid.Databind; 
     } 
    } 

    protected void LoadCallHistory(DateTime TheDate) 
    { 
     linq query that fills the variable TheCallHistory 
    } 

    [WebMethod] 
    public static void ResetDate(DateTime TheNewDate) 
    { 
     var test = new Pages_CallHistory(); 
     var test2 = test.LoadCallHistory(TheNewDate.Date); 
     //test2 loads fine 

     test.GridCallHistory.DataSource = test2; 
     //this is not underlined but bugs at runtime 
     //Object reference not set to an instance of an object. 

     test.GridCallHistory.DataBind(); 
     test.MyPanel.Update(); 
     //this is not underlined but doesn't get executed because 
     //because it stops at the line above 

     //I'd like to update the content of 
     //the gridview on the page with the updated gridview. 
    } 

То, что я хотел бы сделать в методе страницы, - это 1) вызвать LoadCallHistory с новым параметром даты и 2) сообщить gridview MyGrid для повторного связывания с новыми данными, которые находятся в TheCallHistory.

Я борюсь с этим способом страницы; он не работает, и я застрял. Как это делается?

+0

Почему это не удается? Какие результаты вы получаете? Вы пытались поставить контрольные точки и переходить через код в режиме отладки, чтобы убедиться, что «TheCallHistory» имеет данные, которые он должен иметь? Кроме того, уверены ли вы, что gridview может привязываться к источнику, например List ? –

+0

На странице больше, чем я мог бы опубликовать, но в двух словах, да, все работает на загрузке страницы. Существует также сортировка и подкачка внутри панели обновления, которая работает без обновления. До сих пор в методе страницы у меня: \t \t var test = new Pages_CallHistory(); \t \t test.LoadCallHistory (TheNewDate.Date); \t \t \t \t Мне нужно связать MyGrid и получить его на странице. – frenchie

ответ

1

ИТАК решение использовать _doPostBack в JavaScript:

__doPostBack('MyPanel', DateString); 

Метод страница только для отправки и получения данных, а не для выполнения обратных вызовов на UpdatePanels.

0

Взгляните на мой ответ на этот вопрос here. Короче говоря, вы создаете новый экземпляр сетки и записываете ее вывод вручную.

+0

Строка привязки gridview к источнику данных не работает; Я не могу понять. Где привязка происходит в вашем решении? – frenchie

+0

У меня есть строка «searchControl.Search()». Это будет то, где вы выполняете свою привязку, что-то вроде «myGrid.DataSource = dataSource; myGrid.DataBind();». После их выполнения содержимое может быть захвачено с помощью функции RenderControl. –

+0

Это строки, которые у меня уже есть, и которые выбрасывают исключение: «Ссылка на объект не установлена ​​в экземпляр объекта». – frenchie

Смежные вопросы