ASP.NET: То, как получить доступ к повторителю, генерировало элементы из JavaScript?

Я иногда использовал такое выражение: -

string a = null;

    if((a = GetValue()) != null){
    DoSomething();
    }

Это хороший синтаксис для назначения других значений, отличных от нуля, и проверки его на булево выражение. Хотя имейте в виду, что крайняя скобка всегда будет запрашивать логическое выражение.

7
задан Community 23 May 2017 в 12:01
поделиться

4 ответа

Другие отвечающие стороны нашли различные биты связанными с различными аспектами вопроса. мне удалось починить полное решение. я имею, копируют/вставляют relavent отрывки здесь.

Первое важное изменение является использованием asp:LinkButton, который позволяет как событие OnClientClick, которое предоставляет Вам прямой доступ к событию javascript OnClick:

<asp:repeater ID="itemsRepeater"
      OnItemDataBound="itemsRepeater_ItemDataBound"
      runat="Server">
   <itemtemplate>
      <tr>         
         <td>
            <asp:HyperLink ID="linkView" runat="server"
               Text="<%# GetItemText((Item)Container.DataItem) %>"
               NavigateUrl="<%# GetViewItemUrl((Item)Container.DataItem) %>" />
         </td>
         <td>
            <asp:LinkButton ID="linkImpregnate" runat="server"
                   Text="Impregnate"
                   OnClientClick="<%# GetImpregnateUrl((Item)Container.DataItem) %>" />
         </td>
      </tr>
   </itemtemplate>
</asp:repeater>

Код - позади вручную создает код презентации (yay для разделения контроллера и представления!), который содержит вызов JavaScript.

protected string GetNodeAcknowledgementClientClick(Item item)
{
   if (!(item is HotGirl))
      return ""; //this shouldn't be called for non-acknowledgements, but i won't fail

   HotGirl girl = (HotGirl)item;

   String szOnClientClick =
         "return ImpregnateGirl(this, "+
               Toolkit.QuotedStr(girl.GirlGUID.ToString()) + ", "+
               Toolkit.QuotedStr(GetItemName(item))+");";

   return szOnClientClick;
}

И наконец в aspx, я нахожу, что случайное место делает пюре в некотором JavaScript:

<script type="text/javascript" src="Javascript/jquery.js"></script>  
<script type="text/javascript">
   //<![CDATA[
   function DeleteItem(sender, girlGuid, girlName)   
   {
      if (!confirm("Are you sure you want to impregnate "+girlName+"?"))
      {
         return false;
      }

      $.post(
         'ImpregnateGirl.aspx?GirlGUID='+nodeGuid,
               function(data, textStatus) {
                  if (textStatus == 'success') 
                  {
                     $(sender).parents('tr:eq(0)').hide();
                  }
                  else
                  {
                     return false;
                  }
               }
      );

      //return false to suppress the postback
      return false;
   }
//]]>
</script>

я заставил бы jQuery сделать сообщение как меры безопасности как предложенный парень, но jQuery дал бы ошибку вместо регистрации. Вместо того, чтобы заботиться я принял решение не заботиться.

0
ответ дан 7 December 2019 в 07:51
поделиться

jQuery может откопать теги для Вас:

$("[id$=linkDelete]").click(function() {
    DeleteItem(this.href);
});

В том коде говорится, "находят все элементы DOM, идентификационные концы которых с 'linkDelete' и обеспечивают электричеством следующего обработчика события Click".

4
ответ дан 7 December 2019 в 07:51
поделиться

Я рекомендовал бы против реализации Удалить функции через ссылки таким образом. Удалите ссылки, угроза безопасности.

Скорее лучше потребовать сообщения к тому URL вместо этого. Если бы Вы хотите сделать ajax, я настоятельно рекомендовал бы использовать платформу JavaScript, таким образом, Вы не должны иметь дело с различиями в том, как различные браузеры реализуют XmlHttpRequests.

Например, в jQuery Вы могли сделать это как это:

$.post('Delete.aspx',{itemGuid:'{19a149db-5675-4eee-835d-3d78372ca6f9}'},
    function(data, textStatus) {
        if (textStatus == 'success') {
            $(this).parents('tr:eq(0)').fadeOut();
        }
    });

который сделал бы и вызов ajax и эффект постепенного исчезновения, Вы хотите.

Вы могли затем получить доступ к гуиду объекта в Delete.aspx от Запроса. Форма ["itemGuid"], и это не было бы уязвимо для соединения нападений.

Предотвращение обратных передач

Сервер генерирует обратную передачу wireup, потому что Вы используете управление сервером. Используйте плоскость <a> тег без runat ='server' директива.

Идентификационные данные строки таблицы

Я обычно делаю это путем привязки данных столбца ID некоторого вида и помещения этого в шаблон повторителя:

<tr id='<%#Eval("ID")%>'>

P.S. Я очень не хочу походить на фаната, но jQuery сделает все эти вещи порядком величины легче. Необходимо действительно рассмотреть это, если Вы можете. Иначе Вы собираетесь быть в мире вреда, пытающегося реализовать эти опции последовательным способом через браузеры.

P.P.S. Если бы Delete.aspx и подобные URL только будут названными из JavaScript, я рекомендовал бы использовать ashx http обработчики вместо этого. Можно сделать всю ту же логику сервера без бесполезных издержек полноценной страницы.

3
ответ дан 7 December 2019 в 07:51
поделиться

мой обычно выходит, будучи похож

<asp:LinkButton runat="server" OnClientClick='<%# Eval("ID", "DeleteItem(this, \"{0}\"); return false;") %>' Text="Delete" />

это сделает HTML, который похож

<a id="blah_blah_ctl01" onclick='DeleteItem(this, "{19a149db-5675-4eee-835d-3d78372ca6f9}"); return false;'>Delete</a>

Я включаю "эту" ссылку так, чтобы Вы могли иметь доступ к dom и удалить ссылку..., или это - родитель или что бы то ни было. Оттуда это является довольно прямым для использования jQuery, чтобы на самом деле сделать регистрацию и управление DOM. "Возвращают false"; отключает обратную передачу.

0
ответ дан 7 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: