【问题标题】:ASP.NET page not going to server after button click单击按钮后 ASP.NET 页面不会进入服务器
【发布时间】:2014-11-04 10:08:37
【问题描述】:

我有一个在弹出窗口中使用的 asp.net 页面。这个弹出窗口基本上包含两个图像控件,并且标记包含 JCrop 插件。从页面中,弹出窗口打开,因此页面加载。我正在以字节为单位读取图像,转换为 base64 并将其设置为两个图像控件的 src 属性(两者都有 runat='server')。该页面中有2个按钮。但是点击这些按钮并没有触发任何事件处理程序,如 page_load、button_clicked 等。

<img id="target" runat="server" alt="Main Image" />
<img id="imgCropped" runat="server" alt="Preview Image" class="jcrop-preview" style="border-color:gray" />

protected void Page_Load(object sender, EventArgs e)
    {
        strMIMEType = Session["MIMEType"].ToString();
        strImageData = Session["ImageData"].ToString();
        strImageName = Session["ImageName"].ToString();
        if (!IsPostBack)
        {
            string sTemp = "data:" + strMIMEType + ";base64," + strImageData;
            target.Src = sTemp;
            imgCropped.Src = sTemp;
        }
    }

下面的代码是当用户选择一个图像文件并点击 UploadClick 按钮时。

protected void btnUploadclick(object sender, EventArgs e)
    {
        HttpPostedFile objfile = AsyncUpload.PostedFile;
        if (AsyncUpload.HasFile)
        {
            if (!IsImageValid(objfile))
                ClientScript.RegisterClientScriptBlock(this.GetType(), "ImageNotValid", "alert('Image format is wrong. Please upload JPEG, PNG or GIF images.')");
            else
            {
                Session["ImageData"] = Convert.ToBase64String(System.IO.File.ReadAllBytes(objfile.FileName), 0, System.IO.File.ReadAllBytes(objfile.FileName).Length);
                Session["MIMEType"] = objfile.ContentType;
                Session["ImageName"] = AsyncUpload.FileName;
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "OpenPopUp", "window.open('ImageCropPopup.aspx', 'CropImage', 'height=450,width=700,left=350,top=170,resizable=no,scrollbars=no,toolbar=no,status=no');", true);
            }
        }
        else
            ClientScript.RegisterClientScriptBlock(this.GetType(), "ImageNotUploaded", "alert('Please select an Image.')");
    }

当我单击任何按钮时,它根本不会点击 page_load。请帮忙。

【问题讨论】:

  • 弹出窗口中的 .aspx 页面是否引用了正确的代码隐藏文件?
  • 如果您直接加载页面(即不是通过弹出窗口),提交点击时会触发事件吗?您应该为容器页面和弹出窗口页面提供标记
  • @Dennis R,是的,它指的是背后的正确代码。正如我所说,从容器页面中,当我调用 window.open 时,弹出页面第一次正确打开,事件背后的所有代码都命中了它们各自的处理程序。但之后我裁剪图像并点击保存(其中一个按钮),然后它说页面无法显示。
  • 那么这完全是一个不同的问题。您必须检查 Save 按钮的代码为什么它会导致 page can not be displayed
  • @Jonathan 即使我直接加载页面,同样的事情。添加更多描述: 在容器页面中,我有一个 FileUpload 控件。用户正在那里选择一个文件。我将文件转换为 base64 字符串并分配给 Session 并打开弹出窗口,我正在访问它并分配给 img 选项卡的 src 属性。编辑问题并包含更多代码。

标签: c# jquery asp.net image jcrop


【解决方案1】:

一旦您在 jQuery 弹出窗口中放置了一个 ASP.NET 服务器控件按钮,您就会丢失主页中的单击事件。此时,您基本上已经从 DOM 中删除了该按钮。您可以尝试在主页上使用 jQuery 隐藏您的服务器按钮,将服务器按钮替换为标准 html 按钮,然后单击带有来自 jQuery 的 .trigger 事件的服务器按钮。

像这样:

$("#yourHtmlButtonID").click(function(){

   $("#yourServerButtonID").trigger("click");

 });

请记住使用 jQuery 而不是 ASP.NET 的 Visible = false 属性隐藏您的服务器按钮,因为如果您这样做,它不会被呈现到页面上。

【讨论】:

  • 我有正常的弹出窗口。打开,而不是 jquery 弹出。我用来裁剪图像的 JQuery 仅此而已。我想问题是图像大小。小于 1MB 是好的。一切正常。除此之外,它会爆裂。
  • 以前,我将图像上传到应用程序根目录下的文件夹,然后打开弹出窗口以裁剪图像。现在,我想删除主图像的上传过程,因为我只需要裁剪图像。因此,我删除了该代码,现在我正在读取用户从 Fileupload 控件中选择的图像作为字节,将其转换为 base64,然后将代码分配给 img 控件的 src 属性(runat='server')。到这里为止,一切正常。但是在我裁剪图像并点击保存按钮后,它说页面无法显示。甚至不去 page_load 事件。
  • 如果文件大小超过 1MB,可能需要增加文件大小限制?您可以尝试使用以下&lt;binding name="basicHttpBinding" maxReceivedMessageSize="21000000" maxBufferSize="21000000" &gt; 编辑 web.config 文件
猜你喜欢
  • 1970-01-01
  • 2014-10-21
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
相关资源
最近更新 更多