__EVENTTARGET未定义

时间:2013-04-08 09:07:13

标签: javascript asp.net web-services jquery

我有一个网页(.aspx),我正在通过jQuery ajax加载一些用户控件。 像这样:

$.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");
            }
        });

在WebService.asmx.cs Web服务中,我有一个GetGrid WebMethod,它生成并返回包含网格视图的用户控件的html。这是代码:

[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是一个用户控件,它包含一个GridView,并根据BindData(标准)公共方法的某些条件将其绑定到某些数据。

所有这些代码都运行良好。我已经多次使用过这种技术,以前它工作得很好。

这一次,在将html从服务加载到页面上之后,单击应该进行autopostback的控件(例如asp:Button,asp:DropDownList,asp:CheckBoxList)会抛出以下js esception: __ EVENTTARGET未定义

这部分代码:

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

有什么想法吗?

修改 我发现了一些东西。 theForm的设置如下:

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

由于我在动态生成的html中有表单,因此该表单指的是没有__EVENTTARGET的表单。 我决定从服务中生成的html中删除form标签:

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

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

但在这种情况下,theForm再次

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

但是没有任何形式有这样的身份,现在我得到:

theForm is undefined

异常。

2 个答案:

答案 0 :(得分:1)

仍未定义。我也测试了这个,并且有一些错误(至少在使用ajax时),其中按钮控件的clientID在回发时没有返回。相反,我还有一个输入字段和一个下拉列表也会导致页面上的帖子返回,并且这两个回发实际上返回了正确的ID字符串。它具有特定的按钮控制功能。

答案 1 :(得分:1)

这可能听起来很奇怪,但ASP.NET可能会误检测IE 10和11.这将导致它呈现一个包含__doPostBack JavaScript错误的页面。

一个简单的解决方法是在您的服务器上安装.NET 4.5。如果这不可能(例如,如果它是Window Server 2003),那么可以安装一些修补程序来纠正问题。请参考这个网站:

http://www.hanselman.com/blog/IE10AndIE11AndWindows81AndDoPostBack.aspx