我已经搜索了几个小时,但我迷路了。
是否以任何方式从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],但没有用。有没有办法取消这个事件的建议让我觉得也许我应该在数据绑定事件中中止删除?或者更好的是,如果用户选择上面的下拉文本,如何隐藏删除链接按钮?
提前致谢。
由于
答案 0 :(得分:0)
相反,在服务器端执行此操作,您可以在客户端执行此操作。您可以使用require filed validator并使用它。
实施例
或者在客户端点击时创建一个javascript或jQuery函数,然后检查下拉值并进行验证。
答案 1 :(得分:0)
更新
我决定完全放弃OnClick()事件并使用DetailView的DataBound事件捕获条件。然后,我从下拉列表中检查了值,并根据需要隐藏/显示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;
}
}