做了一个用户控件,里面放了一个Button1,Button1点击有两个事件,一个客户端用来弹出窗口,一个服务端用户处理返回数据,客户端事件用JAVASCRIPT写的,
现在遇到这样一个问题:如何传递参数给弹出窗口?
也就是说当把用户控件放到default.aspx中,比如我放了两个,分别设定用户控件的属性不相同,但是客户端事件(要用JAVASCRIPT获取,因为弹出窗口要用JAVASCRIPT)怎样获取用户控件不同的属性?
我使用属性来获取,结果两次的值都是相同的,为什么?使用隐藏域来获取,也是相同的.
现在遇到这样一个问题:如何传递参数给弹出窗口?
也就是说当把用户控件放到default.aspx中,比如我放了两个,分别设定用户控件的属性不相同,但是客户端事件(要用JAVASCRIPT获取,因为弹出窗口要用JAVASCRIPT)怎样获取用户控件不同的属性?
我使用属性来获取,结果两次的值都是相同的,为什么?使用隐藏域来获取,也是相同的.
showModalDialog(strUrl, strArgus)}
现在需要传strArgus,
在用户控件中定义了属性Pro_Argus,
default.aspx中拖了两个用户控件,分别设定了Pro_Argus,
现在需要在F()中var strArgus=????;怎样才能获取两个用户控件不同的属性?
showModalDialog(strUrl, strArgus,obj)
{
var pa= obj.getAttribute("Pro_Argus");
}
2. 控件 onclick (onclientclick) =showModalDialog(..., ...,this)
showModalDialog(..., ...,this)showModalDialog(strUrl, strArgus,obj)var pa= obj.getAttribute("Pro_Argus");
如果你所定义的属性是在button的父控件内
那就要改成var pa= obj.parentNode.getAttribute("Pro_Argus");
this.usercontrol2.Pro_Argus="protest2";
而在用户控件中button,onclick (onclientclick) =showModalDialog(..., ...,this)
追踪var pa= obj.parentNode.getAttribute("Pro_Argus");值为NULL?????
那是因为 button与你所定义属性的控件之间的父子关系不明确因为不清楚你的用户控件的具体内容.你浏览这个页面,把相关部分的HTML源码 复制过来一看就清楚了.
this.usercontrol2.Pro_Argus="protest2";
如何在用戶控件的代碼中取得這兩個屬性???必須要在用戶控件的javascript中取.
可以執行嗎?我執行結果如下:
Microsoft JScript 執行階段錯誤: 'Pro_Argus' 未被定義
string strq2=this.usercontrol2.Pro_Argus;
但是我的button是是放在自定義控件中的,如何在OnClientClick時取各自的strq1,strq2??
//用户控件
<%@ 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’就是传递的值
//Default页面
<uc:UserShowDialog ID="usd" runat="server" Val1="aaa" />//Val1=‘aaa’就是传递的值
<uc:UserShowDialog ID="usd2" runat="server" Val1="bbb" />//Val1=‘bbb’就是传递的值
這時候你試一下,只能得到bbb,得不到aaa
這種方式試過好久了...
放出来问题就很容易解决了
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怎樣在自定義控件中得到?
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没什么好看的,几段都和上面的类似.
方法一:
在用户控件的代码中.将属性值赋给onclientclick事件的参数
譬如,在用户控件的CS代码中:
BaseQueryButton.Attributes["onclick"]="showModalDialog('"+用户控件的属性+')";
或者
public string ck;
ck="showModalDialog('"+用户控件的属性+')";
this.DataBind();
<asp:Button ID="BaseQueryButton" runat="server"
OnClientClick="<%# ck%>" Text="查詢" />
簡要說一下我的思路:
我的做法比別人特別些,
首先自定義一個WEB控件,放一個BUTTON,
點擊BUTTON彈出一個窗體QUERYWEBFORM,
QUERYWEBFORM中有一個BUTTON,點擊時關閉QUERYWEBFORM,同時將值返回至頁面(default.asp)觸發頁面事件(使用代理以及SESSION可以解決).
在default.asp中可以拖放很多自定義控件,點不同的自定義控件的BUTTON時會傳不同值到QUERYWEBFORM.
傳值時,從自定義控件到QUERYWEBFORM可以querystring,但從default.asp-->QUERYWEBFORM是個難點,
之前走了很多路不知是不是彎路,反正現在用的是隱藏域來解決的..