C# 将值从弹出页面传递到父页面的最佳方式

C# 将值从弹出页面传递到父页面的最佳方式,c#,asp.net,C#,Asp.net,我有一个客户主页,我需要为客户选择位置。为了选择一个位置,我们设计了一个弹出页面,其中有一个显示所有位置的网格。一旦用户对位置进行了拍照,该特定位置应返回主页 位置对象包含feilds-LocId、LocName、LocState、LocCountry、PinCode。 整个location对象应该返回到主页,而不是一个值 我的开业地点代码是 <asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="../Content/Ima

我有一个客户主页,我需要为客户选择位置。为了选择一个位置,我们设计了一个弹出页面,其中有一个显示所有位置的网格。一旦用户对位置进行了拍照,该特定位置应返回主页

位置对象包含feilds-LocId、LocName、LocState、LocCountry、PinCode。 整个location对象应该返回到主页,而不是一个值

我的开业地点代码是

<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="../Content/Images/search.png" Height="21px" ToolTip="Search Location" Width="21px"
                        OnClientClick="ShowLocation();" />

用户选择行后,弹出窗口中的代码

 protected void btnSelect_Click(object sender, EventArgs e)
    {
        List<object> locationValues = gvLocationLookup.GetSelectedFieldValues(new string[] { "LocId", "LocName", "LocState","LocCountry","PinCode" });

        var locationValue = (object[])locationValues[0];

        var location= new Location
        {
            LocId = (int?)locationValue[0],
            LocName = (string)locationValue[1],
            LocState = (string)locationValue[2]
            LocCountry = (string)locationValue[3]
            PinCode =   (string)locationValue[4]
        };
        Session["SELECTED_LOCATION"] = location;
        Response.Write("<script> window.opener.location.reload(false); window.close();</" + "script>");
        Response.End();
    }
protectedvoid b选择\u单击(对象发送方,事件参数e)
{
List locationValues=gLocationLookup.GetSelectedFieldValues(新字符串[]{“LocId”、“LocName”、“LocState”、“LocCountry”、“PinCode”});
var locationValue=(object[])locationValue[0];
var位置=新位置
{
LocId=(int?)locationValue[0],
LocName=(字符串)locationValue[1],
LocationState=(字符串)locationValue[2]
LocationCountry=(字符串)locationValue[3]
PinCode=(字符串)位置值[4]
};
会话[“选定位置”]=位置;
Write(“window.opener.location.reload(false);window.close();”;
Response.End();
}

目前我使用会话值来移动值。有没有更好的办法

您可以在这里查看适合您需要的方法


我以前创建过这样的系统,只使用客户端代码(javascript,不使用C)。 要求是,在填写表单时,可以在弹出窗口中选择特定值(例如位置)。 在弹出窗口中单击该值后,父页面通过javascript接收该信息,弹出窗口自动关闭

请注意,父页面必须有需要填写的字段。在我的例子中,它是一个自动完成的文本框(=FieldName)和一个链接的HiddenField(=FieldName_键),它保存文本框中文本的唯一键

function confirmSelection(code, key)
{
    try {
        window.opener.document.getElementById('<%= FieldName %>').value = code;
        window.opener.document.getElementById('<%= FieldName %>_key').value = key;
        window.close();
    }
    catch (e) {window.close();}
}
功能确认选择(代码、键)
{
试一试{
window.opener.document.getElementById(“”).value=code;
window.opener.document.getElementById(“U键”).value=key;
window.close();
}
catch(e){window.close();}
}
此客户端脚本(与C#脚本相反)的另一个好处是,您不必重新加载父页面,这可能会干扰用户的工作

function confirmSelection(code, key)
{
    try {
        window.opener.document.getElementById('<%= FieldName %>').value = code;
        window.opener.document.getElementById('<%= FieldName %>_key').value = key;
        window.close();
    }
    catch (e) {window.close();}
}