关于masterpage中的提交, 在线等

fengforever 2007-07-03 09:15:13
是这样的.
定义了一个masterpage, 用于全站的基本页面, 最上面有一个登录的框框.
可以输入用户名密码点击login button用来登录.

一个login的页面是从这个masterpage展开去的, 里面同样有一个登录界面
也是输入用户名密码然后点击login button来登录.

现在我的问题是, 在login这个页面中, 当输入完用户名密码,
焦点还停留在用户名或者密码的输入框中时, 如果敲键盘上的回车
这个时候触发的确是masterpage中的那个login button的事件.

怎么解决呢?
...全文
309 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen024 2010-02-21
  • 打赏
  • 举报
回复
365UpTime.com 当您网站/服务器无法访问时 马上通过手机短信/QQ/MSN/邮件报警通知您,无需安装任何客户端插件,大家都在用,很方便的!
fengforever 2007-07-04
  • 打赏
  • 举报
回复
多谢楼上的讲解, 呵呵.

不过我宁愿用asp:panel, 也不想用js脚本来控制.
Jinglecat 2007-07-04
  • 打赏
  • 举报
回复
1.
在子页面的登录外面包一个asp:panel, 然后给这个panel加上defaultButton就可以了.
=============
其实不需要这个 panel, 直接设置模板页的 HtmlForm.DefaultButton

2.
DEMO

// .master

<%@ Master Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("Login from master page");
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div style="float:right;">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Login from master page" OnClick="Button1_Click" />
</div>
<br />
<br />
<hr width="100%" />
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</div>
</form>
</body>
</html>

// login.aspx

<%@ Page Language="C#" MasterPageFile="~/JSSample/DefaultSubmitButton/MasterPage.master" Title="Untitled Page" %>

<script runat="server">

protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("Login from login page");
}

protected void Page_Load(object sender, EventArgs e)
{
if (Master != null) {
Master.Page.Form.DefaultButton = Button1.UniqueID;
}
}
</script>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Login from login page" OnClick="Button1_Click" />
</asp:Content>

3.
但是这样又有一个问题, 当用户确实在那个 Master 里面的登录区输入时,敲回车依然触发的时login.aspx 页面的,因此,还是只有自己脚本控制

// login2.apsx

<%@ Page Language="C#" MasterPageFile="~/JSSample/DefaultSubmitButton/MasterPage.master" Title="Untitled Page" %>

<script runat="server">

protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("Login from login page");
}

</script>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<script type="text/javascript">
<!--
document.onkeydown = function() {
//alert("u pressed a key");
var src = event.srcElement;
var key = event.keyCode;
var target;
if(key == 13) {
if(src.id.indexOf("ContentPlaceHolder1") > -1) {
target = document.getElementById("<%= Button1.ClientID %>");// 当前页登录按钮客户端 ID
}
else {
target = document.getElementById("ctl00_Button1"); // 模板页登录按钮客户端 ID
}
//alert("ready to submit....");
target.click();
event.cancelBubble = true;
event.returnValue = false;
}
}
// -->
</script>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Login from login page" OnClick="Button1_Click" />
</asp:Content>
fengforever 2007-07-03
  • 打赏
  • 举报
回复
我不用区分两个login的按钮啊, 只需要单步跟一下就知道了
在我子页面输完用户名密码, 点击键盘上的回车提交时, 触发的就是masterpage里面的事件
而不是我这个子页面中的login按钮所对应的事件.

代码就不贴了, 你可以自己试试
在masterpage里面放一个button, 在子页面中再放一个button
然后在子页面的输入框中敲击键盘上的回车键.

因为我当前的页面只有一个form, 所以当我按下回车时响应的是第一个login按钮,
不管在页面什么地方. 所以后来我手动在子页面加上了asp:panel
  • 打赏
  • 举报
回复
login里边任何不在Content内部并且ContentPlaceHolderID不与masterpage中的contentplaceholder的ID相同的控件都不会显示。你如何区分两个login谁是谁?

贴出部分代码说明你的控件设计结构。
fengforever 2007-07-03
  • 打赏
  • 举报
回复
hoho, 我又自己解决了.
在子页面的登录外面包一个asp:panel, 然后给这个panel加上defaultButton就可以了.
fengforever 2007-07-03
  • 打赏
  • 举报
回复
sp1234(恐龙即将灭绝,剩下的是小小的智人)

现在是这样的. 一个页面, 有两套登录按钮, 一个是masterpage中的, 一个是子页面中的.
我现在是在子页面中输入用户名密码然后按回车, 触发的却是masterpage中的那个登录按钮的事件
  • 打赏
  • 举报
回复
很多呀,没有什么需要解决的。 --> 事件触发的地点很对呀,没有什么需要解决的。

可能你认为masterpage是除了你访问的aspx以外另外一个页面了!

masterpage其实是一个用户控件,尽管这个用户控件内部包含HtmlForm类型的控件这在我们开发其它用户控件时几乎不会遇到(但是实际上完全可以),不是一个页面。
  • 打赏
  • 举报
回复
这个时候触发的确是masterpage中的那个login button的事件.

怎么解决呢?
——————————————————————————————————————————
很多呀,没有什么需要解决的。

masterpage运行时是aspx中的一个用户控件,因此其中的login也是在aspx里边,你始终操作的都是页面中的子控件。就像你装载一个ascx控件,然后ascx控件中的子控件触发事件,这没有任何异常,没有什么需要解决的?!
fengforever 2007-07-03
  • 打赏
  • 举报
回复
多谢楼上的, 不过我一个页面中只有一个form啊.
我如果设置了htmlForm.DefaultButton是我子页面中的提交按钮, 那么我在masterpage中输入用户名密码然后点回车, 就会触发我子页面中的事件了, 这样也不对.
weizhuangzhi 2007-07-03
  • 打赏
  • 举报
回复
设置一下HtmlForm.DefaultButton

62,254

社区成员

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

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

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

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