Диалог jquery и кнопка динамической ссылки asp.net - PullRequest
1 голос
/ 06 декабря 2011

У меня есть сетка, в которой есть строка, содержащая кнопки LinkButtons, которые были добавлены динамически. когда нажимаются эти LinkButtons, мне нужно показать диалоговое окно подтверждения. Я пытался работать как предложено в этом посте: JQuery DIalog и ASP.NET Repeater но это не работает, postBackReference не содержит правильный идентификатор (он игнорирует заполнитель) это мой код:

GridView1_RowCreated(Object sender, GridViewRowEventArgs e)
{
   //some code here

   LinkButton lb = new LinkButton();
   lb.Text = "something";
   lb.ID = "someId";
   string postBackReference = ClientScript.GetPostBackEventReference(lb, string.Empty);
   lb.OnClientClick = "javascript: showConf(function(){"+ postBackReference  +"});return false;";

   TableCell cell = new TableCell();
   cell.Controls.Add(lb);
   e.Row.Cells.Add(cell);
}

У кого-нибудь есть идея?

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

Итак, вот решение, которое сработало для меня: в основном я работал в соответствии с решением в этом посте: JQuery DIalog и ASP.NET Repeater Единственное отличие заключалось в том, что мне приходилось использовать событие RowCreated длядобавление моих динамических LinkButtons и RowDataBound Event для регистрации моей клиентской функции (в противном случае оригинальный __doPostBack не смог бы правильно получить параметр ID (как если бы он игнорировал тот факт, что он находится в заполнителе)).Таким образом, мой код теперь выглядит следующим образом:

GridView1_RowCreated(Object sender, GridViewRowEventArgs e)
{
   //some code here

   LinkButton lb = new LinkButton();
   lb.Text = "something";
   lb.ID = "someId";

   TableCell cell = new TableCell();
   cell.Controls.Add(lb);
   e.Row.Cells.Add(cell);
}

и:

GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
   //some code here

   LinkButton lb = e.Row.FindControl("someId") as LinkButton;
   string postBackReference = ClientScript.GetPostBackEventReference(lb, string.Empty);
   lb.OnClientClick = "javascript: showConf(function(){"+ postBackReference  +"});return false;";

}

клиентская функция - showConf и разметка остаются такими, какими они были.

0 голосов
/ 06 декабря 2011

Я не знаю точно, какова роль JQuery для вашего сценария.Я полагаю, что вы хотите показать какое-то причудливое окно подтверждения, если вы предоставите подробности, я дам более конкретный ответ, но сейчас, вот как это делается с чистым JavaScript:

GridView1_RowCreated(Object sender, GridViewRowEventArgs e)
{

   LinkButton lb = new LinkButton();
   lb.Text = "something";
   lb.ID = "someId";
   lb.OnClientClick = "javascript: return confirm('Are you sure that you want to do this and that?'); ";

   TableCell cell = new TableCell();
   cell.Controls.Add(lb);
   e.Row.Cells.Add(cell);
}

ОБНОВЛЕНИЕ - Попробуйте что-то вроде этого для подхода с пользовательским интерфейсом JQuery

  1. в вашей разметке есть div с id = "dialog-Подтвердить" следующим образом:

     <div id="dialog-confirm" title="" ></div>
    
  2. Определите функцию javascript showConfirmation следующим образом:

     function showConfirmation(confirmationMessage)
     {
          $("#dialog-confirm").dialog("destroy");
          $( "#dialog-confirm" ).dialog({
            resizable: false,
            height:140,
            title: confirmationMessage,
            modal: true,
            buttons: {
                "Yes": function() {
                    $( this ).dialog( "close" );
                    __doPostBack(linkItemID, '');//will cause postback
                },
                Cancel: function() {
                    $( this ).dialog( "close" );
                }
            }
        });
     return false; //it will never postback
     }
    
  3. Теперь ваш код должен выглядеть следующим образом:

     GridView1_RowCreated(Object sender, GridViewRowEventArgs e)
     {
       LinkButton lb = new LinkButton();
        lb.Text = "something";
        lb.ID = "someId";
        lb.OnClientClick = "return showConfirmation('Are you sure you want to do this and that?','"+lb.ID+"'); ";
        TableCell cell = new TableCell();
        cell.Controls.Add(lb);
        e.Row.Cells.Add(cell);
     }
    

Примечание: приведенный выше код не был протестирован, но он должен быть очень близок к тому, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...