做了一个用户控件,里面放了一个Button1,Button1点击有两个事件,一个客户端用来弹出窗口,一个服务端用户处理返回数据,客户端事件用JAVASCRIPT写的,
现在遇到这样一个问题:如何传递参数给弹出窗口?
也就是说当把用户控件放到default.aspx中,比如我放了两个,分别设定用户控件的属性不相同,但是客户端事件(要用JAVASCRIPT获取,因为弹出窗口要用JAVASCRIPT)怎样获取用户控件不同的属性?
我使用属性来获取,结果两次的值都是相同的,为什么?使用隐藏域来获取,也是相同的.

解决方案 »

  1.   

    客户端事件为:F(){var strArgus=????;
    showModalDialog(strUrl, strArgus)}
    现在需要传strArgus,
    在用户控件中定义了属性Pro_Argus,
    default.aspx中拖了两个用户控件,分别设定了Pro_Argus,
    现在需要在F()中var strArgus=????;怎样才能获取两个用户控件不同的属性?
      

  2.   

    1.给这个添加一个对象参数
    showModalDialog(strUrl, strArgus,obj)
    {
    var pa= obj.getAttribute("Pro_Argus");
    }
    2. 控件 onclick (onclientclick) =showModalDialog(..., ...,this)
      

  3.   

    一个页面中我拖了两个用户控件,那var pa= obj.getAttribute("Pro_Argus");得到是第几个用户控件的属性?
      

  4.   

    注意红字
    showModalDialog(..., ...,this)showModalDialog(strUrl, strArgus,obj)var pa= obj.getAttribute("Pro_Argus");
      

  5.   

    this 表示当前点击的button.
    如果你所定义的属性是在button的父控件内
    那就要改成var pa= obj.parentNode.getAttribute("Pro_Argus");
      

  6.   

    用户控件的Pro_Argus属性,我在 default.aspx中this.usercontrol1.Pro_Argus="protest1";
    this.usercontrol2.Pro_Argus="protest2";
    而在用户控件中button,onclick (onclientclick) =showModalDialog(..., ...,this)
    追踪var pa= obj.parentNode.getAttribute("Pro_Argus");值为NULL?????
      

  7.   

    值为NULL
    那是因为 button与你所定义属性的控件之间的父子关系不明确因为不清楚你的用户控件的具体内容.你浏览这个页面,把相关部分的HTML源码 复制过来一看就清楚了.
      

  8.   

    意思搞出路了,我的要求是default.aspx中有this.usercontrol1.Pro_Argus="protest1";
    this.usercontrol2.Pro_Argus="protest2";
    如何在用戶控件的代碼中取得這兩個屬性???必須要在用戶控件的javascript中取.
      

  9.   

    ??????
    可以執行嗎?我執行結果如下:
    Microsoft JScript 執行階段錯誤: 'Pro_Argus' 未被定義
      

  10.   

    你可以给用户控件定义属性,然后在弹出窗口的js事件中通过<%%>这样的方式来调用属性的值就OK了
      

  11.   

    在主頁面可以直接稅用string strq1=this.usercontrol1.Pro_Argus;
    string strq2=this.usercontrol2.Pro_Argus;
    但是我的button是是放在自定義控件中的,如何在OnClientClick時取各自的strq1,strq2??
      

  12.   

    你可以試一下,自定義屬性,假如如頁面中拖了兩個自定義控件,<%%>得到的都是最後一個屬性值.
      

  13.   


    //用户控件
    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UserShowDialog.ascx.cs" Inherits="WebApplication5.UserShowDialog" %>
    <script type="text/javascript" language="javascript">
        function show() {
            var vv = '<%= GetVal1() %>';
            showModalDialog("aaa.aspx?id=" + vv, "");//aaa.aspx就是弹出的页面,你可以在这里处理
        }
    </script>
    <asp:Button ID="btn1" runat="server" Text="按钮1" OnClientClick="show();" />
    <asp:Button ID="btn2" runat="server" Text="按钮2" />public partial class UserShowDialog : System.Web.UI.UserControl
        {
            private string val1;
            public string Val1
            {
                set { val1 = value; }
            }
            private string val2;
            public string Val2
            {
                get { return val2; }
                set { val2 = value; }
            }
            public string GetVal1()
            {
                return val1;
            }
            protected void Page_Load(object sender, EventArgs e)
            {
            }
        }
    //Default页面
        <uc:UserShowDialog ID="usd" runat="server" Val1="aaa" />//Val1=‘aaa’就是传递的值
      

  14.   


    //Default页面
        <uc:UserShowDialog ID="usd" runat="server" Val1="aaa" />//Val1=‘aaa’就是传递的值
        <uc:UserShowDialog ID="usd2" runat="server" Val1="bbb" />//Val1=‘bbb’就是传递的值
    這時候你試一下,只能得到bbb,得不到aaa
    這種方式試過好久了...
      

  15.   

    让你贴出 浏览器中浏览后的相关部分HTML源码,感觉像机密一样不舍得放出.
    放出来问题就很容易解决了
      

  16.   

    UserControl:
            public string ParametersFixArgu
            {
                get { return this.HiddenFixedArgus.Value; }
                set
                {
                    this.HiddenFixedArgus.Value = value;
                }
            }    function BaseQueryButtonClick(obj) {
            var strFixArgus;
            strFixArgus = obj.parentNode.getAttribute("ParametersFixArgu");   
            var strUrl = "/WebFormQuery/WebFormBaseQuery.aspx?fixargu=" + strFixArgus;

            var result = showModalDialog(strUrl, strFixArgus, 'dialogWidth:450px;dialogHeight:500px;center:yes;help:no;resizable:no;status:no'); //打开模态子窗体,并获取返回值
        }
    <asp:Button ID="BaseQueryButton" runat="server" 
        OnClientClick="BaseQueryButtonClick(this)" onclick="BaseQueryButton_Click" 
        Text="查詢" />default.aspx<uc1:OpenWindowButton ID="OpenWindowButton1" runat="server" 
                                                        OnEventQueryObject="OpenWindowButton1_EventQueryObject" ParametersFixArgu="paraADMMD1" />
    <uc1:OpenWindowButton ID="OpenWindowButton2" runat="server" 
                                                        OnEventQueryObject="OpenWindowButton2_EventQueryObject" ParametersFixArgu="paraADMMD2" />以上為代碼,現在ParametersFixArgu怎樣在自定義控件中得到?
      

  17.   

    浏览器浏览后的前台相关部分HTML源码你放的程序源码没用的.
      

  18.   


        function BaseQueryButtonClick(obj) {
            var strFixArgus= obj.parentNode.getAttribute("ParametersFixArgu");        
            var strUrl = "/WebFormQuery/WebFormBaseQuery.aspx?fixargu=" + strFixArgus;
            var result = showModalDialog(strUrl, strFixArgus, 'dialogWidth:450px;dialogHeight:500px;center:yes;help:no;resizable:no;status:no'); //打开模态子窗体,并获取返回值
        }
    </script>
    <input type="submit" name="OpenWindowButton2$BaseQueryButton" value="查詢" onclick="BaseQueryButtonClick(this);" id="OpenWindowButton2_BaseQueryButton" class="btn1" />生成的HTML没什么好看的,几段都和上面的类似.
      

  19.   

    从你给出的前台HTML源码看,你给用户控件的属性值没有在HTML源码中有任何表现/展现.那么只能换个角度来处理.
    方法一:
    在用户控件的代码中.将属性值赋给onclientclick事件的参数
    譬如,在用户控件的CS代码中:
    BaseQueryButton.Attributes["onclick"]="showModalDialog('"+用户控件的属性+')";
    或者
    public string ck;
    ck="showModalDialog('"+用户控件的属性+')";
    this.DataBind();
    <asp:Button ID="BaseQueryButton" runat="server" 
        OnClientClick="<%# ck%>" Text="查詢" />
      

  20.   

    首先得謝謝你的回覆..
    簡要說一下我的思路:
    我的做法比別人特別些,
    首先自定義一個WEB控件,放一個BUTTON,
    點擊BUTTON彈出一個窗體QUERYWEBFORM,
    QUERYWEBFORM中有一個BUTTON,點擊時關閉QUERYWEBFORM,同時將值返回至頁面(default.asp)觸發頁面事件(使用代理以及SESSION可以解決).
    在default.asp中可以拖放很多自定義控件,點不同的自定義控件的BUTTON時會傳不同值到QUERYWEBFORM.
    傳值時,從自定義控件到QUERYWEBFORM可以querystring,但從default.asp-->QUERYWEBFORM是個難點,
    之前走了很多路不知是不是彎路,反正現在用的是隱藏域來解決的..