关于masterpage中的提交, 在线等

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

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

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

怎么解决呢?
...全文
295 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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,244

社区成员

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

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

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

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