一页面default.aspx,一search.ascx页面。
default.aspx点击按钮后调用search.ascx页。并把查询字符串(strsql)给search.ascx。
search.ascx里写了接收查询字符串的方法,根据查询字符串进行查询,并把结果绑定到gridview.
问题:
1。在default.aspx里动态增加了search.ascx,怎么把查询字符串传给search.ascx.
Control aaa = LoadControl("search.ascx");
this.PlaceHolder1.Controls.Add(aaa);
2.search.ascx里可不可以实现这样的功能:
一文本框,一查询按钮,一gridview.在文本框中输入内容,点查询按钮后,gridview里显示查询结果。可不可以还按普通的aspx页一样进行实现 ,如果不是如何实现呢?
我加了<form>出错,如果不加点查询按钮不回发 。
最好是有个例子
default.aspx点击按钮后调用search.ascx页。并把查询字符串(strsql)给search.ascx。
search.ascx里写了接收查询字符串的方法,根据查询字符串进行查询,并把结果绑定到gridview.
问题:
1。在default.aspx里动态增加了search.ascx,怎么把查询字符串传给search.ascx.
Control aaa = LoadControl("search.ascx");
this.PlaceHolder1.Controls.Add(aaa);
2.search.ascx里可不可以实现这样的功能:
一文本框,一查询按钮,一gridview.在文本框中输入内容,点查询按钮后,gridview里显示查询结果。可不可以还按普通的aspx页一样进行实现 ,如果不是如何实现呢?
我加了<form>出错,如果不加点查询按钮不回发 。
最好是有个例子
解决方案 »
- 请教:如何用代码控制IE打印预览横向
- button无响应事件 急~~
- 在页面中使用Substitution,怎样在静态方法中获取Profile引用?
- 迷茫了好久,还是找不到错误,麻烦大家看看??
- .net显示数据是不是只能用While reader.Read()...end while?即使只有一个记录,也要用这个循环吗?有没有别的办法(或象asp直接rs("字段
- mvc下返回一个二维码显示?
- 菜鸟求教: 点击B页Button刷新A页! 急,在线等!
- ViewState在作用?
- 如何得到邮箱地址的官网地址
- 输入的字符串格式不正确
- 求助!VS2008 无法连接ASP.NET Development Server!怎么解决啊???
- "PDMS.BLL.MenuControl"类型初始值设定项引发异常,在线等
this.PlaceHolder1.Controls.Add(aaa);
你的search的类型名或者接口 bbb=(你的search的类型名或者接口) aaa;
bbb.SQL="select field1,field2 from yourTable";在你编译整个网站无语法错误之后,search.ascx的代码部分的class名就可以用来强制转换aaa为具体的类型对象,于是你就可以看到(在vs智能感知上也可以看到)那个用来输入SQL的属性。或者,更好的办法,是在开发search.ascx之前就可以定义一个interface,然后开发这个ascx时让其class实现此interface。此时,无需开发完成ascx,你就可以在开发aspx时直接使用这个interface强制转换aaa的类型,直接在vs智能感知上看到你需要的属性定义。基于接口开发软件是比较好的架构师所喜欢的做法,一般程序员不了解其好处所以会觉得稍显麻烦。
if (this.txtContent.Value == "")
{
this.Page.RegisterClientScriptBlock("", "<script language='javascript'>alert('不能为空')</script>");
return;
}
//不为空赋值
_strContent = this.txtContent.Value;
//将关键字加密(你也可以不加密)
_strContent = RegisterService.GetUserNameByDES(_strContent); //传递关键字参数
Response.Redirect("/Knows/Search.aspx?keyword=" + _strContent, true);search.aspx页
//接收关键字参数
keyword = (Request.QueryString["keyword"] != null) ? Request.QueryString["keyword"].ToString() :
string.Empty;
//再解密
keyword1 = RegisterService.GetUserNameFromDES(keyword);
我的search.ascx里
public partial class ascx_search1 : System.Web.UI.UserControl{
private string _kk, strsql;
public string kk
{
get { return _kk; }
set { this.strsql = _kk; } }
protected void Page_Load(object sender, EventArgs e)
{ string connstr = "server=.;user id=sa;password=;database=pubs";
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(strsql, conn);
DataTable DT = new DataTable();
DataSet DS = new DataSet();
da.Fill(DS, "jobs");
GridView2.DataSource = DS.Tables[0].DefaultView;
GridView2.DataBind();
da.Dispose();
}
}
sp1234,你的search的类型名或者接口 bbb=(你的search的类型名或者接口) aaa;
应该是那个,我不太明白.
{
string kk{get;set;}
}然后,声明应该写:public partial class ascx_search1 : System.Web.UI.UserControl,ISearch
{
private string _kk, strsql;
public string kk
{
.......
最后,用户控件应该保持自己的状态,因此kk应该定义形如为:public string strsql
{
get{ return (string)ViewState["strsql"]; }
set{ ViewState["strsql"]=value; strsql_changed=true; }
}public bool strsql_changed=false;当你编写asp.net页面的时候,你可以首先在页面上放置一个Button,编写aspx并调试的时候时不时点击这个button测试一下你的页面上的控件时候丢掉了状态。你的程序,如果回发,由于变量strsql的值丢掉了,你的ascx就会显示错误的条件。所以strsql要记住自己的状态,使用ViewState,而不能简单使用变量。当页面上某个地方造成页面刷新的时候,strsql的值并没有改变,GridView2会自动恢复自己的状态以及界面。而你的ascx不论用户是否改变strsql的值都会重新读取数据库并重新生成GridView,这是极大的浪费。
{
if(strsql_changed)
{
string connstr = "server=.;user id=sa;password=;database=pubs";
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(strsql, conn);
DataTable DT = new DataTable();
DataSet DS = new DataSet();
da.Fill(DS, "jobs");
GridView2.DataSource = DS.Tables[0].DefaultView;
GridView2.DataBind();
da.Dispose();
}
}
this.PlaceHolder1.Controls.Add(aaa);
ascx_search1 bbb = (ascx_search1)aaa;
bbb.kk = "select * from jobs";
出现错误:The type or namespace name 'ascx_search1' could not be found (are you missing a using directive or an assembly reference?)
在aspx页里还需要<%@regsist %>吗?
(1)首先在ascx页
<%@ Control ClassName="WebUserControl" %>
(2)其次aspx页
<%@ Reference Control="WebUserControl.ascx" %>
(3)最后cs
protected WebUserControl aaa;
如何:以编程方式创建 ASP.NET 用户控件的实例更新:2007 年 11 月就像能以编程方式在 ASP.NET 网页上创建任何服务器控件的实例一样,也能以同样方式创建用户控件的实例。
以编程方式创建用户控件的实例 1. 在用户控件中,请确保 @ Control 指令包含将类分配给用户控件的 ClassName 属性。 下面的示例对 ClassName 属性进行设置以强类型化用户控件。
复制代码 <%@ Control className="MyUserControl" %> 2. 在要使用该用户控件的页中,通过 @ Reference 指令创建对该用户控件的引用。 当以编程方式创建用户控件时,只有创建了对该控件的引用之后,ASP.NET 网页才能使用该用户控件的强类型。例如,下面的代码创建对 MyUserControl.ascx 文件中所创建用户控件的引用。
复制代码 <%@ Reference Control="MyUserControl.ascx" %> [说明] 说明: 打算以编程方式加载控件时,请使用 @ Reference。打算以声明方式向页添加用户控件时,请使用 @ Register 指令。有关详细信息,请参见如何:在 ASP.NET 网页中包括用户控件。
3. 使用用户控件的类名创建该控件的实例变量。该类将成为 ASP 命名空间的一部分。 例如,如果希望创建声明为 Spinner 类的用户控件的实例,请使用如下所示的语法:
Visual Basic
复制代码 Protected Spinner1 As ASP.Spinner C#
复制代码 Protected ASP.Spinner Spinner1; 4. 通过在代码中调用 LoadControl 方法创建用户控件的实例。
5. 根据需要分配属性值,然后向页上容器的 ControlCollection 集合添加控件,如 PlaceHolder 控件。
[说明] 说明: 当使用 Add 方法向 ControlCollection 对象添加控件时,这些控件将按被处理的顺序放置在集合中。如果希望将控件添加到集合中的特定位置,请使用 AddAt 方法并指定要在其中存储该控件的索引位置。 示例下面的示例演示一个以编程方式加载用户控件的 ASP.NET 网页。该页包含一个 @ Reference 指令,用于指定控件的文件。LoadControl 方法读取该文件并将其实例化为可添加到页的控件。C#
复制代码<%@ Page Language="C#" %>
<%@ Reference Control="~/Controls/Spinner.ascx" %>
<script runat="server">
private ASP.Spinner Spinner1;
protected void Page_Load(object sender, EventArgs e)
{
Spinner1 = (ASP.Spinner)LoadControl("~/Controls/Spinner.ascx");
// Set MaxValue first.
Spinner1.MaxValue = 20;
Spinner1.MinValue = 10;
PlaceHolder1.Controls.Add(Spinner1);
}protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = Spinner1.CurrentNumber.ToString();
}
</script><html>
<head id="Head1" runat="server">
<title>Load User Control Programmatically</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:PlaceHolder runat=server ID="PlaceHolder1" />
<br />
<asp:Button ID="Button1" runat="server"
Text="Button"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>