javascript - __EVENTTARGET 未定义

标签 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,它生成并返回包含 GridView 的用户控件的 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)方法根据某些条件将其绑定(bind)到某些数据。

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

这一次,在从服务加载 html 到页面后,单击应该进行自动回发的控件(例如 asp:Button、asp:DropDownList、asp:CheckBoxList),抛出以下 js 异常: __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 中有表单,所以 theForm 指的是没有 __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>", "");
}

但在这种情况下,theForm 又是

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

但没有任何具有此类 ID 的表单,现在我得到:

theForm is undefined

异常。

最佳答案

它仍然是未定义的。我也对此进行了测试,并且有一些错误(至少在使用 ajax 时),其中按钮控件的 clientID 在回发时没有返回。相反,我还有一个输入字段和一个下拉菜单也会导致页面上的回发,而这两个回发实际上返回了正确的 ID 字符串。它是特定于按钮控制的东西。

关于javascript - __EVENTTARGET 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15875257/

相关文章:

javascript - 从 Rails 3 中的 Controller 方法或助手获取数据到 ajax

javascript - 在 javascript 中获取隐藏 <SPAN> 的文本

c# - 比较两个对象并找出差异

Wcf 服务代理名称/命名空间命名策略

c# - 如何为 WCF Web 服务创建字符串数组?

java - 使用 Java、Apache Axis2、Hibernate 和 MySQL 的 Restful Webservices 及其性能

javascript - 从数组中删除元素和突变的问题

javascript - React Native 目前是否支持访问用户的地址簿

javascript - Firebase 身份验证不适用于 Chrome

c# - 如何从客户端输入的地址栏中获取值?