我的首页 index.aspx 上有一个使用了 AjaxControlToolkit 中的 AutoCompleteExtender 控件的搜索功能,代码如下:<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<table border="0" align="center">
<tr>
<td align="center" valign="middle">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<cc1:AutoCompleteExtender ID="AutoCompleteExtender1" CompletionInterval="100" CompletionSetCount="10" MinimumPrefixLength="1" ServiceMethod="GetCompletionList" ServicePath="Webs/AutoComplete.asmx" TargetControlID="TextBox1" runat="server"></cc1:AutoCompleteExtender>
</td>
<td>
<asp:Button id="Button1" runat="server" Text="搜索" OnClick="Button1_Click"></asp:Button>
</td>
</tr>
</table>
</form>
</body>---------------------------我现在的问题是,当我点击 “搜索” 按钮开始搜索的时候,如何能够新打开一个窗口(比如:result.aspx)来显示搜索结果,而不是由当前 index.aspx 页跳转到 result.aspx 页面上去。protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("<script>window.open('result.aspx?keywords=" + TextBox1.Text + "')</script>"); }我试着用过这种方法,可是用了 window.open 的话,容易被 ie 等浏览器拦截。再者一个最严重的问题是,这种方法对 index.aspx 页面还是要产生回发刷新页面的,这显然是不行的。我认为最理想的方法就是能象传统 web 提交方法那样:<form action="result.aspx" method="post" target="_blank">
<input type="text" name="keywords" id="keywords">
<input type="submit" name="submit">
</form>可是显然,像我我面那样的功能用到了 ajax 控件,所有代码是必须要放在 <form id="form1" runat="server"> </form>中间的。所以这种方法行不通。
-----------------------------------------------------------------------
我的这个问题要如何解决呢,是不是 asp.net 的
<form id="form1" runat="server"> 这个固有的缺陷就是无法实现这个要求呢。
请各们高人帮我想想办法,是否有比较好的解决方案。万分感谢!!
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<table border="0" align="center">
<tr>
<td align="center" valign="middle">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<cc1:AutoCompleteExtender ID="AutoCompleteExtender1" CompletionInterval="100" CompletionSetCount="10" MinimumPrefixLength="1" ServiceMethod="GetCompletionList" ServicePath="Webs/AutoComplete.asmx" TargetControlID="TextBox1" runat="server"></cc1:AutoCompleteExtender>
</td>
<td>
<asp:Button id="Button1" runat="server" Text="搜索" OnClick="Button1_Click"></asp:Button>
</td>
</tr>
</table>
</form>
</body>---------------------------我现在的问题是,当我点击 “搜索” 按钮开始搜索的时候,如何能够新打开一个窗口(比如:result.aspx)来显示搜索结果,而不是由当前 index.aspx 页跳转到 result.aspx 页面上去。protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("<script>window.open('result.aspx?keywords=" + TextBox1.Text + "')</script>"); }我试着用过这种方法,可是用了 window.open 的话,容易被 ie 等浏览器拦截。再者一个最严重的问题是,这种方法对 index.aspx 页面还是要产生回发刷新页面的,这显然是不行的。我认为最理想的方法就是能象传统 web 提交方法那样:<form action="result.aspx" method="post" target="_blank">
<input type="text" name="keywords" id="keywords">
<input type="submit" name="submit">
</form>可是显然,像我我面那样的功能用到了 ajax 控件,所有代码是必须要放在 <form id="form1" runat="server"> </form>中间的。所以这种方法行不通。
-----------------------------------------------------------------------
我的这个问题要如何解决呢,是不是 asp.net 的
<form id="form1" runat="server"> 这个固有的缺陷就是无法实现这个要求呢。
请各们高人帮我想想办法,是否有比较好的解决方案。万分感谢!!
参数:
sURL 必选项。字符串(String)。指定要载入和显示的 URL 。
vArguments 可选项。指定供显示文档时使用的变量。利用这个参数可以传递任何类型的值,包括包含多个值得的数组。对话框可以通过调用程序从 window 对象的 dialogArguments 属性提取这些值。
sFeatures 可选项。字符串(String)。指定对话框的窗口装饰。使用下面的值。多个之间用分号隔开。 dialogHeight : sHeight 设置对话框的高度。
dialogLeft : sXPos 设置对话框左上角相对于桌面的横坐标。
dialogTop : sYPos 设置对话框左上角相对于桌面的纵坐标。
dialogWidth : sWidth 设置对话框的宽度。
center : yes | no | 1 | 0 | on | off 指定对话框是否显示于桌面正中。默认值为 yes 。
dialogHide : yes | no| 1 | 0 | on | off 指定当打印或打印预览时对话框是否隐藏。仅仅当对话框是由被信任的程式打开的时候此参数才可用。默认值为 no 。
edge : sunken | raised 指定对话框窗口边框样式为凹下还是凸起的。默认值为 raised 。
help : yes | no | 1 | 0 | on | off 指定对话框是否显示上下文相关的帮助图标。默认值为 yes 。
resizable : yes | no | 1 | 0 | on | off 指定对话框是否可以被用户改变尺寸。默认值为 no 。
scroll : yes | no | 1 | 0 | on | off 指定对话框是否显示滚动条。默认值为 yes 。
status : yes | no | 1 | 0 | on | off 指定对话框是否显示状态条。对于不被信任的对话框默认值为 yes 。对于被信任的对话框默认值为 no 。
unadorned : yes | no | 1 | 0 | on | off 指定对话框是否显示 chrome 样式边框。仅仅当对话框是由被信任的程式打开的时候此参数才可用。默认值为 no 。
返回值:
vReturnValue : 返回等同于打开的对话框窗口( window )的 returnValue 属性值的值。
说明:
建立模式对话框显示指定的文档。
模式对话框被打开后就会始终保持输入焦点。除非对话框被关闭,否则用户无法切换窗口。
因为无模式对话框能够包含链接指向不同域名下的资源,请不要使用 vArguments 参数传递用户可能认为私有的信息。在模式对话框内部 vArguments 参数可以被模式对话框使用 window 对象的 dialogArguments 属性提取和使用。假如 vArguments 参数被定义为字符串(String),其可以被传递到无模式对话框的最大长度为 4096 个字符。超出的会被截去。
在 IE4+ 中,你可以禁止对话框窗口的滚动条。要关闭滚动条,可以设置对话框窗口内文档的 body 对象的 SCROLL 属性值为 false ,或是从可信任的程式里调用对话框。
在 IE5+ 中,你可以通过使用 sFeatures 参数中的 status 和 resizable 值控制模式对话框。你可以用和使用样式表同样的方法设置默认的字体设置。例如: "font:3; font-size:4" 。
使用多种字体属性,你可以定义多种字体值。
在 Internet Explorer 4.0 中, dialogHeight 和 dialogWidth 的缺省单位为 em ,而在 Internet Explorer 5.0 及以上版本中默认单位为 px 。其值可以是整数(Integer)或浮点数(Floating-point number)。因为绝对长度单位(cm, mm, in, pt, pc, px)和相对长度单位(em , ex)的差别, 要想保证预期的显示结果,在设计时应使用 px 单位。
倘若对话框是可以被改变尺寸的,虽然用户的手动改变可以达到更小的值,但是设计时你可以指定的 dialogHeight 的最小值为 100px 。你可以通过指定 dialogLeft 或 dialogTop 的值来取消对话框显示的居中。即使 center 默认值为 yes 。
IE不拦截..
<form id="form2" action="result.aspx" method="post" target="_blank">
<input type="text" name="keywords" id="keywords">
<input type="submit" name="submit">
</form>js
document.getElementById("keywords").value = "a";
document.getElementById("form2").submit();
<asp:button id="btn1" Text="搜索"
onclientclick="this.form.target='_blank';this.form.action='result.aspx';" runat="server" />
function openWindow()
{
var url = "index.aspx?keywords="+ document.getElementById("textbox1").value; window.force = new ForceWindow();
window.force.pop(url);
}function ForceWindow()
{
this.r = document.documentElement;
this.f = document.createElement("FORM");
this.f.target = "_blank";
this.f.method = "post";
this.r.insertBefore(this.f, this.r.childNodes[0]);
}ForceWindow.prototype.pop = function(sUrl)
{
this.f.action = sUrl;
this.f.submit();
}<input type="button" onclick="openWindow()"/>
如果result.aspx不是当前页面,在提交之前还要删除当前页面的ViewState
<script>
function Change(frm){
var obj = document.getElementById("__VIEWSTATE");
if (obj != null)
obj.parentNode.removeChild(obj); frm.target='_blank';
frm.action='result.aspx';
}
</script>
<asp:button id="btn1" Text="搜索"
onclientclick="Change(this.form);" runat="server" />
onclientclick="this.form.target='_blank';this.form.action='result.aspx';" runat="server" />-------------------------------------------------------------------------------------------------这个办法我试过了,是完全可以的.但是我不知道在新开的这个 result.aspx 页面中如何接收 index.aspx 页中
<asp:TextBox ID="TextBox1" runat="server"> </asp:TextBox> 这个服务器端控件的值 !!求高手再帮看一下。非常感谢!
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
<script type="text/javascript">
function change(frm){
var obj1 = document.getElementById("__VIEWSTATE");
if (obj1 != null)
obj1.parentNode.removeChild(obj1);
var obj2 = document.getElementById("__EVENTVALIDATION");
if (obj2 != null)
obj2.parentNode.removeChild(obj2);
frm.target='_blank';
frm.action='result.aspx';
}
</script></head>
<body>
<form id="form1" runat="server">
<div>
<asp:button id="btn1" Text="搜索" onclientclick="change(this.form);" runat="server" />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</div>
</form>
</body>
</html>
Result.aspx
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Request.Form["TextBox1"]);
}
<asp:TextBox ID="TextBox1" runat="server"> </asp:TextBox> 这个服务器端控件的值 !! -----------------------------
用
Request.Form["TextBox1"]
传参数
参考petshop的做法把文本框的值 搜索关键字一起传过去就行了
<head runat="server">
<title>无标题页</title>
<script type="text/javascript">
function change(frm){
var obj1 = document.getElementById("__VIEWSTATE");
if (obj1 != null)
obj1.parentNode.removeChild(obj1);
var obj2 = document.getElementById("__EVENTVALIDATION");
if (obj2 != null)
obj2.parentNode.removeChild(obj2);
frm.target='_blank';
frm.action='result.aspx';
}
</script></head>
<body>
<form id="form1" runat="server">
<div>
<asp:button id="btn1" Text="搜索" onclientclick="change(this.form);" runat="server" />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</div>
</form>
</body>
</html>
Result.aspx C# code protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Request.Form["TextBox1"]);
}
------------------------------------
这个方法很好,现在就差一点点了,我的这个搜索功能做成了一个 用户控件 usercontrol ,不是在 index.aspx 页中
所以再用 Request.Form["TextBox1"] 取值还是取不到的,如何用 Request.Form 方法取得用户控件中的 TextBox1 的值呢?
Response.Write(Request.Form[1]); //这个得到的是文本框的值
<head runat="server">
<title>无标题页 </title>
<script type="text/javascript">
function change(frm){
var obj1 = document.getElementById("__VIEWSTATE");
if (obj1 != null)
obj1.parentNode.removeChild(obj1);
var obj2 = document.getElementById("__EVENTVALIDATION");
if (obj2 != null)
obj2.parentNode.removeChild(obj2);
frm.target='_blank';
frm.action='result.aspx';
}
</script> </head>
<body>
<form id="form1" runat="server">
<div>
<asp:button id="btn1" Text="搜索" onclientclick="change(this.form);" runat="server" />
<asp:TextBox ID="TextBox1" runat="server"> </asp:TextBox>
</div>
</form>
</body>
</html>
Result.aspx C# code protected void Page_Load(object sender, EventArgs e)
{
//此处接收值可以这样:
// 这两种方法都可以,一个按顺序接收,二是按照最终在html 中的控件名称接收,而不是ID
string getname7 = Request.Form[6];
string getname8 = Request.Form["HeaderTemplateIndex1$TextBox5"]; this.Label8.Text = "搜索法律:" + getname7;
this.Label1.Text = getname7; }
------------------------------------