在AJAX JSON C#ASPNET中保存图像时自动刷新gridview父页面

在AJAX JSON C#ASPNET中保存图像时自动刷新gridview父页面,c#,asp.net,json,ajax,gridview,C#,Asp.net,Json,Ajax,Gridview,在C#ASP.NET 4中的我的GridView中,我插入了一个按钮来编辑GridView行,该行在此模式下在浏览器上打开新网页 protected void btn1_Click(object sender, EventArgs e) { ImageButton btn1 = (ImageButton)sender; GridViewRow row = (GridViewRow)btn.NamingContainer; int oID = Convert.ToInt32

在C#ASP.NET 4中的我的GridView中,我插入了一个按钮来编辑GridView行,该行在此模式下在浏览器上打开新网页

protected void btn1_Click(object sender, EventArgs e)
{
    ImageButton btn1 = (ImageButton)sender;
    GridViewRow row = (GridViewRow)btn.NamingContainer;
    int oID = Convert.ToInt32(gv.DataKeys[row.RowIndex].Values[0]);

    string queryString = "newpage.aspx?oID=" + oID.ToString();
    string newWin = "window.open('" + queryString + "','_blank');";
    ClientScript.RegisterStartupScript(this.GetType(), "pop", newWin, true);
}
<script type="text/javascript">
    $(function () {
        $("#btnSave").click(function () {
            var image = document.getElementById("cc").toDataURL("image/png");
            image = image.replace('data:image/png;base64,', '');
            var qString = "?" + window.location.href.split("?")[1];
            $.ajax({
                type: 'POST',
                url: 'newpage.aspx/oImage' + qString,
                data: '{ "imageData" : "' + image + '" }',
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',

                success: function (msg) {
                    alert('Ok');
                    window.close();
                },

                failure: function (msg) {
                    alert(response.d);
                },

                error: function (msg) {
                    alert(response.d);
                },

                error: function (xhr, ajaxOptions, thrownError) {
                    alert("error : " + thrownError + JSON.stringify(image));
                }
            });
        });
    });
</script>
aspx使用Ajax和JSON在服务器上保存图像,并在此模式下关闭窗口

protected void btn1_Click(object sender, EventArgs e)
{
    ImageButton btn1 = (ImageButton)sender;
    GridViewRow row = (GridViewRow)btn.NamingContainer;
    int oID = Convert.ToInt32(gv.DataKeys[row.RowIndex].Values[0]);

    string queryString = "newpage.aspx?oID=" + oID.ToString();
    string newWin = "window.open('" + queryString + "','_blank');";
    ClientScript.RegisterStartupScript(this.GetType(), "pop", newWin, true);
}
<script type="text/javascript">
    $(function () {
        $("#btnSave").click(function () {
            var image = document.getElementById("cc").toDataURL("image/png");
            image = image.replace('data:image/png;base64,', '');
            var qString = "?" + window.location.href.split("?")[1];
            $.ajax({
                type: 'POST',
                url: 'newpage.aspx/oImage' + qString,
                data: '{ "imageData" : "' + image + '" }',
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',

                success: function (msg) {
                    alert('Ok');
                    window.close();
                },

                failure: function (msg) {
                    alert(response.d);
                },

                error: function (msg) {
                    alert(response.d);
                },

                error: function (xhr, ajaxOptions, thrownError) {
                    alert("error : " + thrownError + JSON.stringify(image));
                }
            });
        });
    });
</script>

有什么建议吗

谢谢你的帮助

代码隐藏

[WebMethod()]
public static void oImage(string imageData)
{
    string folderLocation = path + "\\" + DateTime.Now.ToString("ddMMyyyy") + "\\";
    bool exists = Directory.Exists(folderLocation);

    if (!exists)
    {
        Directory.CreateDirectory(folderLocation);
    }

    string fileNameWitPath = folderLocation +
        Guid.NewGuid() + "_" + DateTime.Now.ToString("ddMMyyyyHHmmss") + ".png";

    mtsp(fileNameWitPath);

    using (FileStream fs = new FileStream(fileNameWitPath, FileMode.Create))
    {
        using (BinaryWriter bw = new BinaryWriter(fs))
        {
            byte[] data = Convert.FromBase64String(imageData);
            bw.Write(data);
            bw.Close();
        }
    }
}                                 

在ajax成功处理程序中,您将刷新开场白的代码放在哪里了?是否检查了window.opener是否是正确的窗口?@Homungus是刷新opener页面的代码在ajax成功处理程序中。如果尝试
window.opener.location.reload(true)opener页面被刷新,但浏览器再次打开窗口刚刚关闭或打开uu-doPostBack功能可以帮助您-请参见此处:您可以像window.opener一样使用它。u-doPostBack(…)@Homungus谢谢,但我不知道如何调整它以适应我的情况抱歉…嗯,您需要一个回发邮件来重新加载/刷新网格。放置一个style=none的按钮,然后在jqery中简单地转到:$(“#MyBtn”)。单击()它将单击该按钮并运行后面的代码。事实上,由于您正在运行代码以重新刷新,那么您可能会在为datagrid的每一行触发的on row databind中以base64的形式发送映像。
window.location.replace("gv.aspx")
window.close();
window.location = result.getResponseHeader('gv.aspx');
window.close();
                 
[WebMethod()]
public static void oImage(string imageData)
{
    string folderLocation = path + "\\" + DateTime.Now.ToString("ddMMyyyy") + "\\";
    bool exists = Directory.Exists(folderLocation);

    if (!exists)
    {
        Directory.CreateDirectory(folderLocation);
    }

    string fileNameWitPath = folderLocation +
        Guid.NewGuid() + "_" + DateTime.Now.ToString("ddMMyyyyHHmmss") + ".png";

    mtsp(fileNameWitPath);

    using (FileStream fs = new FileStream(fileNameWitPath, FileMode.Create))
    {
        using (BinaryWriter bw = new BinaryWriter(fs))
        {
            byte[] data = Convert.FromBase64String(imageData);
            bw.Write(data);
            bw.Close();
        }
    }
}