关于一个子窗体向父窗体传值的问题

西蒙君霸占阿花 2013-10-24 12:43:37


1 我的父窗体 是点击按钮打开一个窗体。


<asp:Button ID="btnChoseUnit" OnClientClick="javascript:OpenPopup();" runat="server"
Text="单位选择" />
<input type="hidden" id="txtUnitName" runat="server" />
<input type="hidden" id="txtUnitId" runat="server" />

js代码

<script type="text/javascript">
function OpenPopup() {

window.showModalDialog("TreeViewInfo.aspx", "List", "scrollbars=no,resizable=no,width=400,height=263");
}
function setValue(UnitName, UnitId) {
document.getElementById('txtUnitName').value = UnitName;
document.getElementById('txtUnitId').value = UnitId;
}
</script>


看了网上的好多参考,却不知道
<input type="hidden" id="txtUnitName" runat="server" />
<input type="hidden" id="txtUnitId" runat="server" />

这两个隐藏控件的用处。

2 我的子窗体是一个目录树


<input type="hidden" runat="server" id="txtUnitName" />
<input type="hidden" runat="server" id="txtUnitId" />
<div>
<asp:TreeView ID="TrView" Font-Bold="true" Font-Size="15px" runat="server" ImageSet="Contacts"
ShowCheckBoxes="All" OnTreeNodeCheckChanged="TrView_TreeNodeCheckChanged">
<ParentNodeStyle Font-Bold="False" />
<HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" />
<SelectedNodeStyle Font-Underline="True" HorizontalPadding="0px" VerticalPadding="0px"
ForeColor="#5555DD" />
<NodeStyle Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" HorizontalPadding="5px"
NodeSpacing="0px" VerticalPadding="0px" />
</asp:TreeView>
</div>
<div>
<asp:Button ID="btnUnitAdd" runat="server" Text="确认选择" OnClick="btnUnitAdd_Click" />
</div>
</form>


我看网上的参考就是 当点击确认选择的时候 给那两个隐藏控件赋值。

但是我不知道 需要给子窗体也弄两个隐藏控件不

我在网上找了一个参考


StringBuilder strUname = new StringBuilder();
StringBuilder strUnitId = new StringBuilder();
//组织的名字
string UnitName = string.Empty;
//组织Id
string UnitId = string.Empty;
foreach (TreeNode item in TrView.CheckedNodes)
{
if (item.Checked)
{
strUname.AppendLine(item.Text + ";");
strUnitId.AppendLine(item.Value + ";");

}

}
// function valueClose() {
// var UnitName = docment.getElementById('txtUnitName').value;
// var UnitId = docment.getElementById('txtUnitId').value;
// opener.setValue(UnitName, UnitId)
// window.close();
//}

StringBuilder s = new StringBuilder();
s.Append("<script language=javascript>" + "\n");
s.Append("var UnitName = docment.getElementById('txtUnitName').value;");
s.Append("var UnitId = docment.getElementById('txtUnitId').value;");
s.Append("opener.setValue('" + strUname + "', '" + strUnitId + "')");
s.Append("window.close();" + "\n");
s.Append("</script>");
Type cstype = this.GetType();
ClientScriptManager cs = Page.ClientScript;
string csname = "ltype";
if (!cs.IsStartupScriptRegistered(cstype, csname))
cs.RegisterStartupScript(cstype, csname, s.ToString());


我需要传的就只是 strUname 和 strUnitId 这两个值

但是 这个子窗体 不关 还报错

说页面脚本错误

我不知道 这个是不是能够取到值 求解决
...全文
270 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
宝_爸 2013-10-25
  • 打赏
  • 举报
回复
原因就是你不能在C#代码中执行,因为Postback发生,会使得opener丢失。 全部放在js端,就应该可以了。
  • 打赏
  • 举报
回复
JS 基本靠 拷贝 哈哈 不过 已经解决了,我直接把我的目录树 加在了父窗体,用不着传值了!
  • 打赏
  • 举报
回复
都去吃饭了哇?
  • 打赏
  • 举报
回复
引用 11 楼 Siimon 的回复:
[quote=引用 9 楼 shiyong7682719 的回复:] --父窗体 var k = window.showModalDialog(); --子窗体 window.returnValue=返回值; window.close(); 关闭又跳出,在HTML页面中的html和body之间加入<base target=_self> 就可以了
引用 9 楼 shiyong7682719 的回复:
--父窗体 var k = window.showModalDialog(); --子窗体 window.returnValue=返回值; window.close(); 关闭又跳出,在HTML页面中的html和body之间加入<base target=_self> 就可以了
我是这么做的 但是会有 js 的错误呀[/quote]js错误那就debugger啊,不会调式啊;
  • 打赏
  • 举报
回复
好久了 呀 什么方法都用了
  • 打赏
  • 举报
回复
主窗体


 <script type="text/javascript">
        function OpenPopup() {

            window.showModalDialog("TreeViewInfo.aspx", "List", "scrollbars=no,resizable=no,width=400,height=263");
        }
        function setValue(UnitName, UnitId) {
            document.getElementById('txtUnitName').value = UnitName;
            document.getElementById('txtUnitId').value = UnitId;
        }
    </script>
子窗体的 JS 我是从后台生成的
 StringBuilder s = new StringBuilder();
            s.Append("<script language=javascript>");
            s.Append("var UnitName = docment.getElementById('txtUnitName').value;");
            s.Append("var UnitId = docment.getElementById('txtUnitId').value;");
            s.Append("opener.setValue('" + strUname + "', '" + strUnitId + "');");
            s.Append("window.close();");
            s.Append("</script>");
            Type cstype = this.GetType();
            ClientScriptManager cs = Page.ClientScript;
            string csname = "ltype";
            if (!cs.IsStartupScriptRegistered(cstype, csname))
                cs.RegisterStartupScript(cstype, csname, s.ToString());
  • 打赏
  • 举报
回复
引用 9 楼 shiyong7682719 的回复:
--父窗体 var k = window.showModalDialog(); --子窗体 window.returnValue=返回值; window.close(); 关闭又跳出,在HTML页面中的html和body之间加入<base target=_self> 就可以了
引用 9 楼 shiyong7682719 的回复:
--父窗体 var k = window.showModalDialog(); --子窗体 window.returnValue=返回值; window.close(); 关闭又跳出,在HTML页面中的html和body之间加入<base target=_self> 就可以了
我是这么做的 但是会有 js 的错误呀
  • 打赏
  • 举报
回复
很老的问题了
  • 打赏
  • 举报
回复
--父窗体 var k = window.showModalDialog(); --子窗体 window.returnValue=返回值; window.close(); 关闭又跳出,在HTML页面中的html和body之间加入<base target=_self> 就可以了
  • 打赏
  • 举报
回复
还没人??
  • 打赏
  • 举报
回复
页面关闭的时候 又触发
  • 打赏
  • 举报
回复
引用 3 楼 findcaiyzh 的回复:
hold on, 是不是postback后 opener就没有了
对呀,而且 还总是跳出来
宝_爸 2013-10-24
  • 打赏
  • 举报
回复
我觉得子窗口的代码都写到前台吧。
  • 打赏
  • 举报
回复
引用 2 楼 findcaiyzh 的回复:
前后台混在一起了。 没太看懂啊。
就是一个后台 弹出 JS 代码喃
宝_爸 2013-10-24
  • 打赏
  • 举报
回复
hold on, 是不是postback后 opener就没有了
宝_爸 2013-10-24
  • 打赏
  • 举报
回复
前后台混在一起了。 没太看懂啊。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧