asp:LinkButton,如何取消OnClick事件?
asp:LinkButton, how to cancel OnClick event?
我已经搜索了几个小时,但我迷路了。
是否有任何方法从asp:LinkButton命令中取消 OnClick() 事件?
我有以下客户端代码:
<asp:LinkButton ID="LinkButton3" runat="server" CausesValidation="False" CommandName="Delete" OnInit="SetVisibility" OnClientClick="return confirm('Are you sure?');" Text="Delete" OnClick="LinkButton3_Click"></asp:LinkButton>
因此 OnClick() 事件的服务器端代码是...
//Trap the delete button
protected void LinkButton3_Click(object sender, EventArgs e)
{
try
{
if (ListBox1.SelectedItem.Text == "** NO SCHOOL RECORDED **")
throw new Exception("You cannot delete this entry, as it's the default for every student until a School is selected in Basic Enrolments.");
}
catch (Exception exc)
{
webMessageBox.Show(exc.Message);
return;
}
}
如您所见,如果我的代码中的下拉菜单有特定文本,我想中止删除命令。
Return;
语句什么都不做。记录仍然被删除!
有没有办法中止这个事件,因为没有 e.Cancel 方法?
我已阅读 [this][1] 和 [this][2],但无济于事。没有办法取消此事件的建议让我觉得也许我应该中止数据绑定事件中的删除?或者更好的是,如果用户选择上面的下拉文本,如何隐藏删除链接按钮?
提前致谢。
谢谢
您可以在客户端执行,而不是在服务器端执行。您可以使用 require filed validator 并使用它。
例子
- How to place a required field validator inside a GridView TextBox
- How to add a RequiredFieldValidator to DropDownList control?
或者在客户端点击时创建一个javascript或jQuery函数并检查下拉值并进行验证。
更新
我决定完全放弃 OnClick() 事件并使用 DetailView 的 DataBound 事件捕获条件。然后我检查了下拉列表中的值,并根据需要简单地 hide/show LinkButton 控件。
即:
protected void DetailsView1_DataBound(object sender, EventArgs e)
{
LinkButton lnk1 = (LinkButton)DetailsView1.FindControl("LinkButton1");
LinkButton lnk2 = (LinkButton)DetailsView1.FindControl("LinkButton2");
LinkButton lnk3 = (LinkButton)DetailsView1.FindControl("LinkButton3");
if (ListBox1.SelectedItem.Text == "** NO SCHOOL RECORDED **")
{
if (lnk1 != null) lnk1.Visible = false;
if (lnk2 != null) lnk2.Visible = false;
if (lnk3 != null) lnk3.Visible = false;
}
else
{
if (lnk1 != null) lnk1.Visible = true;
if (lnk2 != null) lnk2.Visible = true;
if (lnk3 != null) lnk3.Visible = true;
}
}
我已经搜索了几个小时,但我迷路了。
是否有任何方法从asp:LinkButton命令中取消 OnClick() 事件?
我有以下客户端代码:
<asp:LinkButton ID="LinkButton3" runat="server" CausesValidation="False" CommandName="Delete" OnInit="SetVisibility" OnClientClick="return confirm('Are you sure?');" Text="Delete" OnClick="LinkButton3_Click"></asp:LinkButton>
因此 OnClick() 事件的服务器端代码是...
//Trap the delete button
protected void LinkButton3_Click(object sender, EventArgs e)
{
try
{
if (ListBox1.SelectedItem.Text == "** NO SCHOOL RECORDED **")
throw new Exception("You cannot delete this entry, as it's the default for every student until a School is selected in Basic Enrolments.");
}
catch (Exception exc)
{
webMessageBox.Show(exc.Message);
return;
}
}
如您所见,如果我的代码中的下拉菜单有特定文本,我想中止删除命令。
Return;
语句什么都不做。记录仍然被删除!
有没有办法中止这个事件,因为没有 e.Cancel 方法?
我已阅读 [this][1] 和 [this][2],但无济于事。没有办法取消此事件的建议让我觉得也许我应该中止数据绑定事件中的删除?或者更好的是,如果用户选择上面的下拉文本,如何隐藏删除链接按钮?
提前致谢。
谢谢
您可以在客户端执行,而不是在服务器端执行。您可以使用 require filed validator 并使用它。
例子
- How to place a required field validator inside a GridView TextBox
- How to add a RequiredFieldValidator to DropDownList control?
或者在客户端点击时创建一个javascript或jQuery函数并检查下拉值并进行验证。
更新
我决定完全放弃 OnClick() 事件并使用 DetailView 的 DataBound 事件捕获条件。然后我检查了下拉列表中的值,并根据需要简单地 hide/show LinkButton 控件。
即:
protected void DetailsView1_DataBound(object sender, EventArgs e)
{
LinkButton lnk1 = (LinkButton)DetailsView1.FindControl("LinkButton1");
LinkButton lnk2 = (LinkButton)DetailsView1.FindControl("LinkButton2");
LinkButton lnk3 = (LinkButton)DetailsView1.FindControl("LinkButton3");
if (ListBox1.SelectedItem.Text == "** NO SCHOOL RECORDED **")
{
if (lnk1 != null) lnk1.Visible = false;
if (lnk2 != null) lnk2.Visible = false;
if (lnk3 != null) lnk3.Visible = false;
}
else
{
if (lnk1 != null) lnk1.Visible = true;
if (lnk2 != null) lnk2.Visible = true;
if (lnk3 != null) lnk3.Visible = true;
}
}