GridView控件的UpdatePanel里面的ModalDialog AsyncFileUpload后不更新 [英] Gridview inside UpdatePanel on ModalDialog not updating after AsyncFileUpload

查看:409
本文介绍了GridView控件的UpdatePanel里面的ModalDialog AsyncFileUpload后不更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个更新面板内的GridView和AsyncFileUpload(更新面板之外),我使用上传图片。所有这些都在使用一个被称为ASPX页面的在showModalDialog

我正在绑来实现:​​结果
1.一旦文件上传完成后,更新面板更新和GridView控件显示图像的用户只是增加了。

我所面临的问题:结果
1.在GridView不清爽,即使我有一个数据绑定事件的文件上传到数据库之后。更新面板是越来越通过刷新 __ doPostBack('UpdatePanelID','')在JS通过 OnClientUploadComplete 叫(我通过显示了更新面板中当前时间的标签),结果选中此
2. ModalDialog是开放每当我在保存更改,或点击取消按钮,添加图像后,一个新的页面。如果我只是打开的窗口,点击这些按钮,它们工作得很好。我曾尝试包括<基地目标=_自我/> < HEAD> ,最后与 window.name =落户XXX 的onload身体

任何帮助是AP preciated。
我的code:

ASPX

 <%@页面语言=VBAutoEventWireup =false的codeFILE =RCMT0032.aspx.vb继承=RCWKSHEET.RCMT0032EnableEventValidation =假%GT;
<%@注册标签preFIX =ASP命名空间=AjaxControlToolkit大会=AjaxControlToolkit%GT;< HTML和GT;
< HEAD>
<基地目标=RCMT0032/>
  <标题> RCMT0032< /标题>
    <脚本类型=文/ JavaScript的>        功能readpasseddata(){
            window.name ='RCMT0032';
            VAR RPT = window.dialogArguments;
            。的document.getElementById(HiddenReport)值= RPT;        }
        功能UploadComplete(发件人,参数){
            __doPostBack('gvupd','');
        }
    < / SCRIPT>
< /头>
<身体的onload =readpasseddata()>
    <表ID =Form1的方法=邮报=服务器目标=RCMT0032>
    < ASP:ToolkitScriptManager ID =ToolkitScriptManager1=服务器>< / ASP:ToolkitScriptManager>
    < ASP:AsyncFileUpload ID =BrowserHiddenWIDTH =1=服务器OnClientUploadComplete =UploadCompleteOnUploadedComplete =BrowserHidden_​​UploadedComplete/>
    <按钮类=ActionButtonID =btnSave=​​服务器>储存并退出< /按钮>
    <按钮类=ActionButtonID =btnCloseRUNAT =serverCancel< /按钮>    < ASP:的UpdatePanel ID =gvupd=服务器的UpdateMode =条件>
    <&的ContentTemplate GT;
            < ASP:标签=服务器ID =Label1的/>            < ASP:GridView控件ID =GridView1=服务器的AutoGenerateColumns =FALSE
                    AllowPaging =假的EnableViewState =真的DataKeyNames =序列>
                <柱体和GT;
                < ASP:的TemplateField的HeaderText =意见>
                    <的ItemTemplate>< ASP:文本框ID =意见启用=真MAXLENGTH =249的TextMode =多行文本='<%#的eval(意见)%>/>
                < / ASP:的TemplateField>
                < ASP:的TemplateField的HeaderText =图片>
                    <的ItemTemplate>< ASP:超链接ID =PictHyper=服务器目标=_空白的ImageUrl ='<%#的String.Format(RCMT0033.aspx报告= {0}&放大器;序列= {? 1}的eval(ReportNumber)的eval(序列))%GT;' NavigateUrl ='<%#的String.Format(RCMT0034.aspx报告= {0}&放大器; SEQ = {1}的eval(ReportNumber)的eval(序列))%GT;' />< / ItemTemplate中>< / ASP:的TemplateField>
                < ASP:的TemplateField的HeaderText =删除>
                    <&ItemTemplate中GT;< ASP:复选框=服务器ID =DeleteCB/>< / ItemTemplate中>
                < / ASP:的TemplateField>< /专栏>
        < / ASP:GridView的>
        < /&的ContentTemplate GT;
    < / ASP:的UpdatePanel>
    < / DIV>
    < /表及GT;
 < /身体GT;
 < / HTML>



THE code背后

 私人小组的Page_Load(BYVAL发件人为System.Object的,BYVAL E上System.EventArgs)把手MyBase.LoaD
        如果没有的IsPostBack然后
            LoadData()
            的DataBind()
        其他
            随着ViewState的
                _intReportNumber = CINT(.Item(报告))
                _strVendorNumber = CStr的(.Item(VendorNumber))
                _strStatus = CStr的(.Item(状态))
            结束与
        万一
    结束小组    公用Sub LoadData()
    //数据放入DATATABLE DT
            GridView1.DataSource = DT
            GridView1.DataBind()
        抓住犯错由于异常
            扔犯错
        结束Try
    结束小组保护小组UploadData()
        如果BrowserHidden.PostedFile IsNot运算没有AndAlso运算BrowserHidden.PostedFile.FileName<> 然后
            尝试
                //上传东西
                GridView1.DataBind()
            抓住EX为例外
            结束Try
        万一
    结束小组    保护小组btnClose_ServerClick(BYVAL发件人为System.Object的,BYVAL E上System.EventArgs)把手btnClose.ServerClick
        canceladd()
        ScriptManager.RegisterStartupScript(页,Me.GetType(),的onclick,window.open('','_自我',''); window.close()的;,真)
    结束小组
    保护小组BrowserHidden_​​UploadedComplete(BYVAL发件人为System.Object的,BYVAL E上AjaxControlToolkit.AsyncFileUploadEventArgs)
        UploadData()
    结束小组
    保护小组gvupd_Load(BYVAL发件人为System.Object的,BYVAL E上System.EventArgs)把手gvupd.Load
        Label1.Text = DateTime.Now.ToString()
    结束小组    保护小组btnSave_ServerClick(BYVAL发件人为System.Object的,BYVAL E上System.EventArgs)把手btnSave.ServerClick
        FinalizeAdd()
        Page.ClientScript.RegisterStartupScript(Me.GetType(),的onclick,window.open('','_自我',''); window.close()的;,真)
    结束小组


解决方案

有关您的#2的问题,我不认为你可以重新加载/与任何客户端或服务器端脚本刷新模态窗口。要归档相同或类似的结果,您可以上传控件关闭模式窗口,并返回一个值,表明重开是必要的。然后是在父窗口中,可以使用一个循环需要打开它。如果用户点击模态窗口或在右上角的X按钮关闭按钮,模式将无法再打开,因为它不发送重新打开值回父。

ParentPage.aspx

 <%@页面语言=C#AutoEventWireup =真codeBehind =ParentPage.aspx.cs继承=WebApplication1.ParentPage%GT;<%@注册大会=AjaxControlToolkit命名空间=AjaxControlToolkit标签preFIX =ASP%GT;
!< D​​OCTYPE HTML PUBLIC - // W3C // DTD XHTML 1.0过渡// ENhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
< HTML的xmlns =htt​​p://www.w3.org/1999/xhtml>
<头=服务器>
    <标题>< /标题>
    <脚本类型=文/ JavaScript的>
        功能popModal(){
            变种VAL = window.showModalDialog('ModalChild.aspx','','');
            而(VAL ==重开){
                VAL = window.showModalDialog('ModalChild.aspx','','');
            }
        }
    < / SCRIPT>
< /头>
<身体GT;
    <输入类型=按钮值='流行的模态'的onclick ='popModal();' />
< /身体GT;
< / HTML>

ModalChild.aspx

 < HTML的xmlns =htt​​p://www.w3.org/1999/xhtml>
<头=服务器>
    <标题>< /标题>
    <脚本类型=文/ JavaScript的>
        功能closeAndReOpen(){
            window.returlValue =重新开始;
            window.close()的;
        }
    < / SCRIPT>
< /头>
<身体GT;
    <表ID =form1的=服务器>
    < ASP:ToolkitScriptManager ID =ToolkitScriptManager1=服务器>
    < / ASP:ToolkitScriptManager>
    < D​​IV>
        < ASP:AsyncFileUpload ID =AsyncFileUpload1=服务器OnClientUploadComplete =closeAndReOpen();
            OnUploadedComplete =AsyncFileUpload1_UploadedComplete/>        <输入类型=按钮值=关闭的onclick =window.close()的; />        < ASP:的UpdatePanel ID =UpdatePanel1=服务器的UpdateMode =条件>
            <&的ContentTemplate GT;
                < ASP:GridView控件=服务器ID =GridView1的AutoGenerateColumns =FALSEOnRowDataBound =GridView1_RowDataBound>
                    <柱体和GT;
                        < ASP:的TemplateField>
                            <&ItemTemplate中GT;
                                < IMG =服务器ID =IMG/>< / ItemTemplate中>
                        < / ASP:的TemplateField>
                    < /专栏>
                < / ASP:GridView的>
            < /&的ContentTemplate GT;
            <&触发器GT;
                < ASP:AsyncPostBackTrigger控件ID =AsyncFileUpload1/>
            < /触发器>
        < / ASP:的UpdatePanel>
    < / DIV>
    < /表及GT;
< /身体GT;
< / HTML>

ModalChild.aspx.cs

 使用系统;
使用System.Collections.Generic;
使用System.Linq的;
使用的System.Web;
使用System.Web.UI程序;
使用System.Web.UI.WebControls;
使用System.IO;
使用System.Web.UI.HtmlControls;命名空间WebApplication1
{
    公共部分类ModalChild:System.Web.UI.Page
    {
        保护无效的Page_Load(对象发件人,EventArgs的发送)
        {
            如果(!Page.IsPostBack)
            {
                LoadGrid();
            }
        }        保护无效LoadGrid()
        {
            var中的文件=新DirectoryInfo的(使用Server.Mappath(数据))的GetFiles。(* PNG);
            GridView1.DataSource =文件;
            GridView1.DataBind();
        }        保护无效GridView1_RowDataBound(对象发件人,GridViewRowEventArgs E)
        {
            如果(e.Row.RowType == DataControlRowType.DataRow)
            {
                VAR网络= e.Row.DataItem为FileInfo的;
                VAR IMG = e.Row.FindControl(IMG)作为HtmlImage;
                img.Src = @数据\\+ fi.Name;
            }
        }        保护无效AsyncFileUpload1_UploadedComplete(对象发件人,AjaxControlToolkit.AsyncFileUploadEventArgs E)
        {
            如果(AsyncFileUpload1.PostedFile!= NULL)
            {
                VAR savePath =使用Server.Mappath(@数据\\+ Guid.NewGuid()的ToString()+巴纽);
                AsyncFileUpload1.SaveAs(savePath);
            }
        }
    }
}

I have a GridView inside an update panel, and a AsyncFileUpload (outside the Update Panel) that I am using to upload Images. All these are in a ASPX page called using the SHOWMODALDIALOG.

What I'm tying to achieve:
1. As soon as the file upload completes, the Update Panel updates, and the gridview displays the image the user just added.

The problems I'm facing:
1. The Gridview is not refreshing, even though I have a Databind event after the file is uploaded to the database. The Update Panel is getting refreshed through the __doPostBack('UpdatePanelID',' ') in a JS called by OnClientUploadComplete (I'm checking this through a Label showing current time in the Update Panel)
2. The ModalDialog is opening a new page whenever I click on 'Save Changes' or 'Cancel' button after adding an Image. If I just open the window and click these buttons, they work fine. I did try including <base target="_self" /> in the <head>, and finally settled with window.name="xxx" onload body.

Any help is appreciated. My code:

ASPX

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="RCMT0032.aspx.vb" Inherits="RCWKSHEET.RCMT0032" EnableEventValidation="false"%>
<%@ Register TagPrefix="asp" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit"%>

<html>
<head>
<base target="RCMT0032" />
  <title>RCMT0032</title>
    <script type="text/javascript">

        function readpasseddata() {
            window.name = 'RCMT0032';
            var rpt = window.dialogArguments;
            document.getElementById("HiddenReport").value = rpt;

        }
        function UploadComplete(sender, args) {
            __doPostBack('gvupd', '');
        }         
    </script>
</head>
<body onload="readpasseddata()" >
    <form id="Form1" method="post" runat="server" target="RCMT0032" >
    <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></asp:ToolkitScriptManager>
    <asp:AsyncFileUpload id="BrowserHidden" Width="1" runat="server" OnClientUploadComplete="UploadComplete" OnUploadedComplete="BrowserHidden_UploadedComplete"/>
    <button class="ActionButton" id="btnSave" runat="server">Save & Exit</button>
    <button class="ActionButton" id="btnClose" runat="serverCancel</button>

    <asp:UpdatePanel id="gvupd" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
            <asp:Label runat="server" ID="Label1" />

            <asp:GridView id="GridView1" Runat="server" AutoGenerateColumns="False"
                    AllowPaging="false" EnableViewState="true" datakeynames="Seq">
                <Columns>
                <asp:TemplateField HeaderText="Comments">
                    <ItemTemplate><asp:TextBox ID="comments" Enabled="true" MaxLength="249" TextMode="MultiLine" Text='<%# Eval("Comments") %>'/>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Picture">
                    <ItemTemplate><asp:HyperLink id="PictHyper" runat="server" Target="_blank" ImageUrl='<%# String.Format("RCMT0033.aspx?report={0}&seq={1}", Eval("ReportNumber"), Eval("Seq"))%>' NavigateUrl='<%# String.Format("RCMT0034.aspx?report={0}&seq={1}", Eval("ReportNumber"), Eval("Seq"))%>' /></ItemTemplate></asp:TemplateField>         
                <asp:TemplateField HeaderText="Delete">
                    <ItemTemplate><asp:CheckBox runat="server" ID="DeleteCB" /></ItemTemplate>
                </asp:TemplateField></Columns>
        </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>
    </div>
    </form>
 </body>
 </html>


THE CODE BEHIND

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoaD
        If Not IsPostBack Then
            LoadData()
            DataBind()
        Else
            With ViewState
                _intReportNumber = CInt(.Item("Report"))
                _strVendorNumber = CStr(.Item("VendorNumber"))
                _strStatus = CStr(.Item("Status"))
            End With
        End If
    End Sub

    Public Sub LoadData()
    //GET DATA INTO DATATABLE DT
            GridView1.DataSource = dt
            GridView1.DataBind()
        Catch err As Exception
            Throw err
        End Try
    End Sub

Protected Sub UploadData()
        If BrowserHidden.PostedFile IsNot Nothing AndAlso BrowserHidden.PostedFile.FileName <> "" Then
            Try
                //UPLOAD STUFF
                GridView1.DataBind()
            Catch ex As Exception
            End Try
        End If
    End Sub

    Protected Sub btnClose_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.ServerClick
        canceladd()
        ScriptManager.RegisterStartupScript(Page, Me.GetType(), "onclick", "window.open('','_self',''); window.close();", True)
    End Sub


    Protected Sub BrowserHidden_UploadedComplete(ByVal sender As System.Object, ByVal e As AjaxControlToolkit.AsyncFileUploadEventArgs)
        UploadData()
    End Sub


    Protected Sub gvupd_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles gvupd.Load
        Label1.Text = DateTime.Now.ToString()
    End Sub

    Protected Sub btnSave_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.ServerClick
        FinalizeAdd()
        Page.ClientScript.RegisterStartupScript(Me.GetType(), "onclick", "window.open('','_self',''); window.close();", True)
    End Sub

解决方案

For your #2 issue, I don't think you can reload/refresh the modal window with either client side or server side script. To archive the same or similar result, you can have the upload control to close the modal window and return a value to indicate reopening is needed. then in the parent window, you can use a loop to open it as needed. if user clicks on close button on modal window or the X button on top right, the modal will not be reopened because it does not sent the "reopen" value back to parent.

ParentPage.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ParentPage.aspx.cs" Inherits="WebApplication1.ParentPage" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function popModal(){
            var val = window.showModalDialog('ModalChild.aspx', '', '');
            while (val == "reopen") {
                val = window.showModalDialog('ModalChild.aspx', '', '');
            }
        }
    </script>
</head>
<body>
    <input type='button' value='Pop Modal' onclick='popModal();' />
</body>
</html>

ModalChild.aspx

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function closeAndReOpen(){
            window.returlValue = "reopen";
            window.close();
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
    </asp:ToolkitScriptManager>
    <div>
        <asp:AsyncFileUpload ID="AsyncFileUpload1" runat="server" OnClientUploadComplete="closeAndReOpen();"
            OnUploadedComplete="AsyncFileUpload1_UploadedComplete" />

        <input type='button' value='Close' onclick='window.close();' />

        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <img runat="server" id="img" /></ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="AsyncFileUpload1" />
            </Triggers>
        </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>

ModalChild.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Web.UI.HtmlControls;

namespace WebApplication1
{
    public partial class ModalChild: System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                LoadGrid();
            }
        }

        protected void LoadGrid()
        {
            var files = new DirectoryInfo(Server.MapPath("Data")).GetFiles("*.png");
            GridView1.DataSource = files;
            GridView1.DataBind();
        }

        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                var fi = e.Row.DataItem as FileInfo;
                var img = e.Row.FindControl("img") as HtmlImage;
                img.Src = @"Data\" + fi.Name;
            }
        }

        protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
        {
            if (AsyncFileUpload1.PostedFile != null)
            {
                var savePath = Server.MapPath(@"Data\" + Guid.NewGuid().ToString() + ".png");
                AsyncFileUpload1.SaveAs(savePath);
            }
        }
    }
}

这篇关于GridView控件的UpdatePanel里面的ModalDialog AsyncFileUpload后不更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆