方法是在页面加载时触发的,但不是通过asp按钮触发的
本文关键字:asp 按钮 加载 方法 | 更新日期: 2023-09-27 18:25:00
我有两个asp:Labels,第一个用几个按钮替换,第二个用项目列表替换。
我想点击按钮来过滤项目。
按钮的内容是通过用html替换文本以编程方式添加的,效果良好。
asp:
<form id="form1" runat="server">
<asp:Label id="filters" runat="server" Text="Filters here"/>
<asp:Label id="itemList" runat="server" Text="List of items here"/>
</form>
过滤器标签的结果html:
<input type="submit" onclientclick="Load_Items(0)" runat="server" value="First"/>
<input type="submit" onclientclick="Load_Items(1)" runat="server" value="Second"/>
<input type="submit" onclientclick="Load_Items(2)" runat="server" value="Third"/>
相关c#:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Load_Items(0);
}
}
public void Load_Items(int filterType)
{
//code to load items (pseudo below)
for each row in list
if filterType = itemType
build string
replace second label with string
}
在页面加载时,一切都按照我的意愿进行,内容由第一个项目过滤(因此为Load_Items(0)
),如果我手动将page_load中的0更改为另一个数字,它将按其他类型过滤,但如果我单击以编程方式添加的按钮,除了页面刷新之外,什么都不会发生。
我知道后回查是通过在它之前和里面添加一个文本替换来工作的。
我还添加了一个asp:按钮,以确保它与按钮的添加方式无关,如下所示(从搜索中推荐一些额外的东西):
<asp:Button runat="server" CausesValidation="False" onclientclick="Load_Items(2); return false;" text="Submit" />
那么问题出在哪里呢?
OnClientClick
属性指定单击按钮时在浏览器中运行的javascript。由于您可能没有名为Load_Items
的javascript函数,这将生成一个脚本错误,然后该按钮将导致表单返回。
服务器端Click
事件将在服务器上激发,但不允许您传递参数。您将只获得按钮实例和一个空的EventArgs
实例。
您最好将Command
事件与CommandArgument
属性结合使用。
<asp:Button runat="server" CommandArgument="2" OnCommand="Load_Items" ...
事件处理程序将使用CommandEventArgs
的CommandArgument
属性来访问单击按钮的参数:
protected void Load_Items(object sender, CommandEventArgs e)
{
Load_Items(Convert.ToInt32(e.CommandArgument));
}
嗯,这是我认为每个asp.net开发人员都会遇到的常见问题。它的共同点是,asp.net事件系统不起作用,就像windows窗体一样。Page
对象和该页面上的所有控件都有生命周期事件,这些事件在任何请求期间都会触发,即使是来自更新面板。当您通过代码创建这些控件时,必须记住,这些控件的所有事件都应作为Page
对象的一部分工作。这就是为什么必须在Page_Init
事件中创建这些对象,然后才能触发所有其他控件的事件。还请记住,您必须将这些控件创建为asp.net对象:
var btn = new Button();
但不是简单地添加html标记。当它们被创建时,你必须在每个请求之后重新创建它们。
请看一下我的另一个答案。