通过javascript编程设置请求[quot;__EVENTTARGET"]

Programmatically set Request["__EVENTTARGET"] from javascript

本文关键字:quot EVENTTARGET javascript 编程 设置 请求 通过      更新时间:2024-02-07

我正在编写ASP.NET应用程序,应该检查Page_LoadRequest["__EVENTTARGET"]的服务器端值。我需要从客户端编程设置它的值。我试着这样设置:

document.getElementById('__EVENTTARGET').value = "my_value";

但它不起作用。你能帮我吗,为什么?非常感谢。

UPD:

function ShowUploadDialog(obj) {
            document.getElementById('<%= uplReportLogo.ClientID %>').click();
            document.getElementById('<%= hdnInvokeFileUpload.ClientID %>').value = $('input[type=file]').val();
            __doPostBack(obj.id, 'Click');
}

服务器控制:

<asp:FileUpload runat="server" ID="uplReportLogo" CssClass="file upload" />
<asp:Button runat="server" ID="btnReportImage" Text="Load Image..." CssClass="button action load" 
     OnClientClick="javascript: return ShowUploadDialog(event, this);" OnClick="btnReportImage_Click" />

UPD2:

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

我在theForm.submit();行有"拒绝访问"异常,为什么?

ASP.NET使用该变量来存储任何回发的sender,因此我认为每次都会覆盖您的值。您可以尝试调用

__doPostBack('my_value','any_other_argument')

然后在Page_Load事件中检查该值。

要使其工作,请确保删除ASPX文件第一行中的EventValidation属性。

这就是你如何在代码背后处理它:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            string _evt = this.Request["__EVENTTARGET"]; // 1st parameter
            string _eva = this.Request["__EVENTARGUMENT"]; // 2nd parameter
            switch (_evt)
            {
                case "my_value":
                    //do anything here
                    break;
                default:
                    break;
            }
        }
    }

编辑:

按照您的示例进行编辑:

JS:

function ShowUploadDialog() {
        document.getElementById('<%= uplReportLogo.ClientID %>').click();
        document.getElementById('<%= hdnInvokeFileUpload.ClientID %>').value = $('input[type=file]').val();
        __doPostBack('fileUpload', '');
    }

ASPX:

<asp:Button runat="server" ID="btnReportImage" Text="Load Image..." CssClass="button action load" 
        OnClientClick="ShowUploadDialog();"  />

CS:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        string _evt = this.Request["__EVENTTARGET"]; // 1st parameter
        string _eva = this.Request["__EVENTARGUMENT"]; // 2nd parameter
        switch (_evt)
        {
            case "fileUpload":
                btnReportImage_Click(); 
                break;
            default:
                break;
        }
    }
}
protected void btnReportImage_Click() // remove sender & event arguments here, you do not need them
{
    //your code
}

由于拒绝访问错误,表单无法提交,您只需要覆盖框架生成的函数并处理异常,直到表单未提交,只需继续调用此函数即可。我遇到了同样的问题,现在已经解决了。在您的页面上添加此功能。B.O.Luck

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