2015-12-04 2 views
0

Я пытаюсь вызвать функцию codebehind с javascript. Мне нужно сделать некоторые операции с моим gridview. Вот мой JavaScript:Вызвать функцию codebehind из метода javascript

function hideColumn() { 
var gridrows = $("#GridViewHdcvi tbody tr"); 
AddTeklif.RemoveTextBoxes(); 
for (var i = 0; i < gridrows.length; i++) { 
    gridrows[i].cells[5].style.display = "none"; 
     } 
    return false; 
     }; 

И мой отделенный код:

[WebMethod] 
    public static void RemoveTextBoxes() 
    { 
     foreach (GridViewRow row in GridViewHdcvi.Rows) 
     { 
      TextBox txb = (TextBox)row.FindControl("txtAdet"); 
      string adet = txb.Text; 
      txb.Visible = false; 
      Label lbl = (Label)row.FindControl("LblAdet"); 
      lbl.Text = adet+" $"; 
     } 
    } 

У меня есть ошибки вроде «Ссылки на объект требуется для нестатических полей, методы или свойств CRM.AddTeklif. GridViewHdcvi 'в' GridViewHdcvi.Rows '. Когда я вызываю ошибку метода «public void RemoveTextBoxes()», но метод не работает, поскольку он не является статичным.

+3

Вы не может получить доступ к элементам управления экземпляром этой страницы из WebMethod. Вы даже не можете использовать '(Page) HttpContext.Current.Handler'. Поэтому либо используйте postback, либо попытайтесь сделать это с помощью чистого javascript/jquery. –

+0

У меня была подобная загадка, и, как говорят другие, я думаю, что это почти невозможно; если интересно, см. http://stackoverflow.com/questions/32594884/how-can-i-invoke-a-server-side-event-from-jquery-sharepoint-2010 –

ответ

1

Кажется, что вы смешиваете два разных понятия. JavaScript запускается из браузера и не будет иметь никакого доступа к вашему серверному коду. Здесь вы пытаетесь вызвать WebMethod, когда ваша страница Rendered будет отправлена ​​в браузер.

Лучшим подходом было бы преобразование метода RemoveTextBoxes в jQuery, поскольку то, что вы хотите сделать, это изменить DOM.

0

Так вы можете вызвать функцию JavaScript hideColumn() из кода позади.

Поместите это в метод, в котором вы хотите вызвать функцию javascript.

Page.ClientScript.RegisterStartupScript(this.GetType(), "hideColumn", "hideColumn(;", true); 

Для вызова кода из функции javascript вам необходимо сыграть некоторые трюки.

1.) создать скрытый контроль кнопки. Вы должны скрыть его в CssClass

<asp:Button ID="hdnButton" runat="server" CssClass="hidden" /> 



.hidden { 
    display: none; 
} 

2.) Создайте метод hdnButton щелчка в коде позади

3.) Вызов скрытого события нажатия кнопки из вашего JavaScript

   function CallCodeBehind() { 

       document.getElementById('<%= hdnButton.ClientID%>').click(); 

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