asp.net 하위 창의 값이 부모 창으로 전송됨

4552 단어
winform 프로그램에서 자주 사용하는 기능입니다. 하위 창을 팝업해서 하위 창에서 선택이나 계산을 끝내고 선택이나 계산의 결과를 부모 창에 되돌려줍니다.이 기능은 winform 프로그램에서 쉽게 실현되는데 웹 프로그램에서 어떻게 이 기능을 실현합니까?
사실 웹 프로그램도 이 기능을 실현할 수 있다. 원리는 페이지 요소의 가시성을 이용하여 부모 페이지의 컨트롤 ID를 하위 페이지에 전달한 다음에 하위 페이지에서 컨트롤에 값을 부여하여 하위 페이지의 값을 저장하는 목적을 달성하는 것이다.코드는 다음과 같습니다.
<a href = "javascript:void(0)" onclick = "ShowProductWindow('<%=txtProduct.ClientID %>','<%=lblProductID.ClientID %>')" style="width:30px">  </a>

하이퍼링크를 정의하고 하이퍼링크를 클릭하면 하위 페이지가 팝업됩니다. ShowProductWindow는javascript 함수로 두 개의 매개 변수가 있습니다. 각각 부모 페이지에서 지정한 두 개의 컨트롤의 ID입니다. 함수에서 하위 페이지의 URL 검색 문자열을 통해 부모 페이지의 두 컨트롤의 id 값을 전달합니다. 정의는 다음과 같습니다.
    function ShowProductWindow(obj,objid)
    {
        var m = document.getElementById(obj);                     //       
        var p = getPosition(m);                                   //             
        var url = 'ProductSelect.aspx?TBIN='+obj+'&TBINID='+objid;//       ,        ID   url          
        window.open(url,'newwindow', 'height=400, width=400, top='+p.Y+', left='+p.X+', toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no');                                 //      ,       ,    
    }
    //           
    function getPosition(e)
    {
        var left = 0;
        var top = 0;
        var scroll = e;
        //    
        while(e)
        {
            left += e.offsetLeft;
            top += e.offsetTop;
            e = e.offsetParent
        }
        //     
        while(scroll)
        {
            if (scroll.scrollLeft){left -= scroll.scrollLeft;}
            if (scroll.scrollTop){top -= scroll.scrollTop;}
            scroll = scroll.parentElement
        }
        return {X:left,Y:top}
    }

하위 페이지의 페이지load 이벤트에서 부모 페이지 컨트롤의 id 값을 받아들여야 합니다. 페이지에 숨겨진 컨트롤에 값을 저장할 수 있습니다. 새로 고칠 염려가 없습니다.
    protected void Page_Load(object sender, EventArgs e)
    {
        lgc = new ProductManageLogic(cidCurrent);

        if (!IsPostBack)
        {
            BindData();

            string tbin = Request.Params["TBIN"] == null ? "" : Request.Params["TBIN"].ToString();
            txtTBIN.Value = tbin;                         //          id   txt   

            string tbinid = Request.Params["TBINID"] == null ? "" : Request.Params["TBINID"].ToString();
            txtTBINID.Value = tbinid;                    //            id      txt   
        }
    }

하위 페이지 되돌림 단추에서 하위 페이지의 되돌림 값을 부모 페이지 컨트롤에 써서 되돌림 값을 전달하는 효과를 가져야 합니다.여기에는 자바스크립트 함수를 빌려야 한다.
    protected void gvContent_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "select")
        {
            string name = gvContent.DataKeys[int.Parse(e.CommandArgument.ToString())].Values["productname"].ToString();
            string id = gvContent.DataKeys[int.Parse(e.CommandArgument.ToString())].Values["id"].ToString();


            this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "", "ReturnDetail('"+name+"','"+id+"');", true);
            //Response.Write("<script>window.close();window.opener.location.href=window.opener.location.href;</script>");
        }
    }

이 예는 gridview에서 select라는 하이퍼링크를 누르면 되돌아옵니다.하이퍼링크를 눌렀을 때, 먼저 되돌려야 할 값name과 id를 가져오고, 페이지에서 자바스크립트 함수 ReturnDetail을 실행합니다. 이 함수에서 되돌려야 할 값을 부모 페이지의 컨트롤에 기록합니다. 함수 정의는 다음과 같습니다.
        function ReturnDetail(BIN,BINID)
        {
            var _TBIN=document.all("txtTBIN").value;                        //                ID(load    )
            var obj_TBIN= eval("window.opener.document.all('"+_TBIN+"')");  //                
            obj_TBIN.value= BIN;                                            //             (         )
            
            var _TBINID=document.all("txtTBINID").value; 
            var obj_TBINID= eval("window.opener.document.all('"+_TBINID+"')");   
            obj_TBINID.value= BINID;
            
            window.close();                                                 //   close        ,       
        }

부모 페이지로 돌아가면 부모 페이지 컨트롤에서 하위 페이지의 귀환 값을 꺼내 해당하는 작업을 할 수 있습니다.

좋은 웹페이지 즐겨찾기