2015-02-04 4 views
0

Я искал часы, но я потерялся.asp: LinkButton, как отменить событие OnClick?

Есть в любом случае Отменить событие OnClick() из команды asp: LinkButton?

У меня есть следующий код на стороне клиента:

<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?

Я прочитал [это] [1] и [это] [2], но безрезультатно. Предположение о том, что нет способа отменить это событие, заставляет меня думать, что, возможно, мне следует отменить удаление в событиях привязки данных? Или еще лучше, как скрыть ссылку удаления, если пользователь выбирает выше выпадающий текст?

Заранее спасибо.

Благодаря

+1

Почему бы не просто использовать событие команды, а и если e.CommandName это удалить, сделать проверку, чтобы увидеть, если соблюдены все условия, где вы не хотите, чтобы продолжить и просто обернуть это условно. –

+0

Но как я могу прервать событие OnCommand()? Вернуть;? – Fandango68

+0

Не прерывайте его. Просто коротко замыкайте его перед вызовом своей функции, которая удалит запись с условной логикой. –

ответ

0

UPDATE

Я решил угробить событие OnClick() целиком и ловушкой состояние, используя событие DataBound в DetailView в. Затем я проверил значение из раскрывающегося списка и просто спрятал/показал элементы управления 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; 
    } 
} 
0

Вместо делать это на стороне сервера, вы можете сделать это на стороне клиента. Вы можете использовать требуемый валидатор и использовать его.

Примеры

  1. How to place a required field validator inside a GridView TextBox
  2. How to add a RequiredFieldValidator to DropDownList control?

Или создать яваскрипт или JQuery функции на клиентских мышах и проверьте значение выпадающего и сделать проверку.

+0

Спасибо @Shekha, но я после решения C# о том, как прервать событие OnClick(). Не имеет ничего общего с jquery, скриптами и т. Д. – Fandango68

Смежные вопросы