Click here to Skip to main content
15,893,486 members
Please Sign up or sign in to vote.
3.00/5 (2 votes)
I have a web page(.aspx), on which I'm loading some user control by jQuery ajax.
Something like this:

JavaScript
$.ajax({
               type: "POST",
               url: "WebService.asmx/GetGrid",
               data: data,
               contentType: "application/json; charset=utf-8",
               dataType: "json",
               success: function(result){
                    $('#divAjaxGridViewContainer').html(result.d);
               },
               error: function(error) {
                   alert("Error");
               }
           });


In WebService.asmx.cs Web Service I have a GetGrid WebMethod which generates and returns the html of user control, that contains grid view. Here is the code:


C#
[WebMethod]
    public string GetPage(object[] criteria)
    {
        Page page = new Page {ViewStateMode = ViewStateMode.Disabled};
 
        AjaxGridView grid = (AjaxGridView)page.LoadControl("~/Controls/AjaxGridView.ascx");
        grid.ViewStateMode = ViewStateMode.Disabled;
 
        grid.BindData(criteria);
 
        HtmlForm form = new HtmlForm {ViewStateMode = ViewStateMode.Disabled};
 
        form.Controls.Add(grid);
 
        page.Controls.Add(form);
 
        string result = String.Empty;
 
        using (StringWriter output = new StringWriter())
        {
            page.Server.Execute(page, output, false);
            result = output.ToString();
        }
        return result;
    }


AjaxGridView is a user control, that contains a GridView, and binds it to some data depending on some criteria with BindData(criteria) public method.

All this code works fine. I've used this technique several times and it used to work fine.

This time, after loading the html from service onto the page, clicking the controls that should make autopostback (such as asp:Button, asp:DropDownList, asp:CheckBoxList), throws the following js esception:
__EVENTTARGET is undefined

on this part of code:
JavaScript
function __doPostBack(eventTarget, eventArgument) {
       if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
           theForm.__EVENTTARGET.value = eventTarget;
           theForm.__EVENTARGUMENT.value = eventArgument;
           theForm.submit();
       }
   }



Any ideas?

EDIT:
I've figured out something.
theForm is being set like this:

var theForm = document.forms['ctl00'];
JavaScript
if (!theForm) {
    theForm = document.ctl00;
}

As I have form in my dynamically generated html, theForm is referring to that form, which doesn't have __EVENTTARGET.

I decided to remove form tag from generated html in service:

C#
if (!String.IsNullOrEmpty(result))
            {
                Regex frmOpenFinder = new Regex("(<form)[^>]*>");

                Match frmOpen = frmOpenFinder.Match(result);
                string frm = frmOpen.Value;
                result = result.Replace(frm, "").Replace("</form>", "");
            }

But in this case, theForm is again

var theForm = document.forms['ctl00'];
JavaScript
if (!theForm) {
    theForm = document.ctl00;
}

But there isn't any form with such id and now I get:

JavaScript
theForm is undefined

exception.
Posted
Updated 8-Apr-13 4:27am
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900