Javascript __EVENTTARGET未定义

Javascript __EVENTTARGET未定义,javascript,asp.net,web-services,jquery,Javascript,Asp.net,Web Services,Jquery,我有一个网页(.aspx),我正在该网页上加载jQueryAjax的一些用户控件。 大概是这样的: $.ajax({ type: "POST", url: "WebService.asmx/GetGrid", data: data, contentType: "application/json; charset=utf-8", dataType: "json",

我有一个网页(.aspx),我正在该网页上加载jQueryAjax的一些用户控件。 大概是这样的:

$.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");
            }
        });
var theForm = document.forms['ctl00'];
if (!theForm) {
    theForm = document.ctl00;
}
在WebService.asmx.csweb服务中,我有一个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(criteria)public方法根据某些条件将其绑定到某些数据

所有这些代码都可以正常工作。我已经使用过这种技术好几次了,它曾经工作得很好

这一次,在将html从服务加载到页面上后,单击应该进行自动回发的控件(例如asp:Button、asp:DropDownList、asp:CheckBoxList)将抛出以下js选项: \u事件目标未定义

关于代码的这一部分:

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
有什么想法吗

编辑: 我想出了一些办法。 表格的设置如下:

$.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");
            }
        });
var theForm = document.forms['ctl00'];
if (!theForm) {
    theForm = document.ctl00;
}
由于我在动态生成的html中有表单,表单引用的是该表单,而该表单没有_EVENTTARGET。 我决定从服务中生成的html中删除表单标记:

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

    Match frmOpen = frmOpenFinder.Match(result);
    string frm = frmOpen.Value;
    result = result.Replace(frm, "").Replace("</form>", "");
}
但是没有任何表格有这样的id,现在我得到:

theForm is undefined

异常。

它仍然未定义。我也对此进行了测试,但有一点是错误的(至少在使用ajax时是如此),即按钮控件的clientID在返回后没有返回。相反地,我也有一个输入字段和一个下拉列表也会导致页面上出现一个post back,而这两个post back实际上返回了正确的ID字符串。这是一种特殊的按钮控制

听起来可能有点奇怪,但ASP.NET可能会错误地检测到IE 10和11。这将导致它呈现带有uu doPostBack JavaScript错误的页面

一个简单的修复方法是在服务器上安装.NET4.5。如果这是不可能的(例如,如果它是WindowsServer2003),那么可以安装一些修补程序来纠正这个问题。请参阅本网站:


\uu EVENTTARGET
设置为导致回发的控件的ClientID。每个asp.net控件都会将这些值传递给
\uu doPostBack
。您可以检查正在生成的html,看看您的情况是否正确。我在添加了MVC4和jQuery的旧版WebForms应用程序中调用
时遇到此错误。删除这个捆绑包似乎解决了问题,我能够毫无问题地保留jquery/jqueryui/jqueryval捆绑包。