Создать всплывающее окно с ‹asp:HyperLink›, передающим параметры

Этот синтаксис HyperLink не работает для передачи параметров в маленькое всплывающее окно:

<asp:HyperLink ID="HyperLink2" runat="server" Text="Manage Related Items"
    NavigateUrl='<%# "editRelatedItems.aspx?" + "ProductSID=" + Eval("ProductSID") + "&CollectionTypeID=" + Eval("CollectionTypeID")+ "&ProductTypeID=" + Eval("ProductTypeID") %>'
    onclick="window.open('editRelatedItems.aspx?','name','height=550, width=790,toolbar=no,directories=no,status=no, menubar=no,scrollbars=yes,resizable=no'); return false;)
    target="_blank" />

Похоже, что тег <asp:HyperLink> не принимает тег "onclick". Любые идеи о том, как получить всплывающее окно, которое может получить эти параметры? Я использую C#, поэтому, возможно, есть способ построить строку NavigateURL в коде позади?

Спасибо за любое понимание, которое у вас может быть.


person Doug    schedule 22.04.2009    source источник


Ответы (7)


<asp:HyperLink 
     ID="HyperLink2" 
     runat="server" 
     Text="Manage Related Items"
     NavigateUrl="#"
     onClick='<%# "window.open('editRelatedItems.aspx" + 
                  "?ProductSID=" + Eval("ProductSID") + 
                  "&CollectionTypeID=" + Eval("CollectionTypeID")+ 
                  "&ProductTypeID=" + Eval("ProductTypeID") + 
                  ",'name','height=550, width=790,toolbar=no,
                  directories=no,status=no,
                  menubar=no,scrollbars=yes,resizable=no'); 
                  return false;%>'  
     Target="_blank" />

Это должно работать, но я бы действительно создал метод javascript для вызова, который открыл бы окно.

<script type="text/javascript">
   function openRelatedItems(productSID, collectionTypeId, productTypeId) { 

       window.open('editRelatedItems.aspx" + 
                  "?ProductSID=" + productSID + 
                  "&CollectionTypeID=" + collectionTypeID + 
                  "&ProductTypeID=" + productTypeID + 
                  ",'name','height=550, width=790,toolbar=no,
                  directories=no,status=no,
                  menubar=no,scrollbars=yes,resizable=no'); 

   }
</script>
person Bob    schedule 22.04.2009
comment
Спасибо, Боб, и всем, кто ответил. Этот код действительно работает, но, как уже упоминалось, управление asp:HyperLink с javascript оказалось менее чем элегантным решением. На данный момент я код из этого предложения, потому что требования просты. С уважением, Дуг - person Doug; 23.04.2009

Из кода на стороне сервера вы можете сделать

HyperLink2.Attributes.Add("OnClick", "yourstuffhere");

это позволит вам указать элементы OnClick.

Вы также можете установить NavigateUrl как что-то вроде "javascript: window.open...", если хотите, опять же, это можно сделать из кода позади.

также

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

person Mitchel Sellers    schedule 22.04.2009
comment
Спасибо, Митчел, в OnClick я должен указать свои параметры Eval (ProductSID), производные от C #, в виде типа JavaScript, иначе эти параметры не будут переданы на строку URL и целевую страницу. Любые идеи синтаксиса о том, как преобразовать мои статусы типа Eval (ProductSID) в JavaScript..? Это вообще возможно? - person Doug; 22.04.2009

Вам нужен элемент управления Hyperlink на стороне сервера? Если нет, я бы порекомендовал просто использовать стандартный тег привязки HTML или, если вам нужно, чтобы он отображался динамически, просто сгенерируйте его в бэкэнде с помощью буквального тега и напишите для него разметку (включая onclick). Вопрос, который вы должны задать себе: «Вы чувствуете себя счастливым?» и "Нужен ли серверный контроль?"

Если вы не знакомы с ним, немного изучите событие ItemDataBound.

Код ключа для размещения в событии ItemDataBound вашего DataList:

Dim lit as Literal = CType(e.Item.FindControl("Literal1"), Literal)

lit.Text = "<a onclick='YOURJAVASCRIPT' href='#'>YOUR TEXT</a>"

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

person Dan Appleyard    schedule 22.04.2009
comment
Дэн, извините, я не упомянул этот факт раньше: гиперссылка находится внутри ‹ItemTemplate› списка данных, поэтому гиперссылка будет собирать разные атрибуты продукта для каждого продукта. Что касается использования вместо этого Literal, я не совсем понимаю ваше предложение - просто замените HyperLink на Literal и сделайте Literal1.text = someThingHereComingFromCodeBehind ? - person Doug; 22.04.2009

В вашем коде onclick отсутствует закрывающая цитата " и есть дополнительная скобка ). Это может быть вашей проблемой.

onclick="window.open('editRelatedItems.aspx?','name','height=550, width=790,toolbar=no,directories=no,status=no, menubar=no,scrollbars=yes,resizable=no'); return false;"

Я обнаружил, что всплывающие окна javascript плохо работают с ASP:HyperLink; Попробуйте создать ссылку с помощью обычного тега привязки:

<a id="HyperLink2" 
     runat="server" 
     NavigateUrl='<%# "editRelatedItems.aspx?ProductSID=" + Eval("ProductSID") + "&CollectionTypeID=" + Eval("CollectionTypeID")+ "&ProductTypeID=" + Eval("ProductTypeID") %>'  
     onclick="window.open('editRelatedItems.aspx?','name','height=550, width=790,toolbar=no,directories=no,status=no, menubar=no,scrollbars=yes,resizable=no'); return false;" 
     Target="_blank">
Manage Related Items
</a>
person Gavin Miller    schedule 22.04.2009

NavigateUrl переопределяет событие onclick тега «a».

Вы хотите установить целевой атрибут и удалить onclick

http://www.w3schools.com/tags/tag_a.asp

person Chris Brandsma    schedule 22.04.2009

Используйте OnClientClick вместо OnClick.

person orip    schedule 22.04.2009

<asp:HyperLink 
     ID="HyperLink2" 
     runat="server" 
     Text="Manage Related Items"
     NavigateUrl="#"
     onClick='<%# "window.open('editRelatedItems.aspx" + 
                  "?ProductSID=" + Eval("ProductSID") + 
                  "&CollectionTypeID=" + Eval("CollectionTypeID")+ 
                  "&ProductTypeID=" + Eval("ProductTypeID") + 
                  ",'name','height=550, width=790,toolbar=no,
                  directories=no,status=no,
                  menubar=no,scrollbars=yes,resizable=no'); 
                  return false;%>'  
     Target="_blank" />

где вы закрыли "после запуска значения URL. этот код показывает ошибку, тег сервера не соответствует требованиям

person user3035224    schedule 26.11.2013