открыть несколько всплывающих окон в JavaScript через asp.net - PullRequest
0 голосов
/ 02 августа 2011

У меня есть хранилище данных sql, в котором есть несколько путей.Мне нужно открыть несколько всплывающих окон / несколько вкладок в браузере.Поэтому я попытался перебрать мой datareader и сделать ClientScript.RegisterStartupScript, но после завершения кода ничего не открывается ...

Вот мой код:

While r.Read()
            ClientScript.RegisterStartupScript(Me.GetType, "popup" + counter.ToString(), "window.open('" + CType(r("AttachmentLink"), String) + "','_blank' + new Date().getTime(),'menubar=no')", True)
            counter += 1
        End While

Я положил часы иМой читатель действительно содержит данные, которые я хочу, но не открывается всплывающее окно: (.

edit

Вот некоторые примеры данных, которые находятся в столбце AttachmentLink моей базы данных:

\\myserver\myfolder\1.pdf
\\myserver\myfolder\mydoc.doc
\\myserver\myfolder\myimage.jpg

Фактическая ссылка на локальный файловый сервер, хранящийся в нашей сети ...

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

Попробуйте изменить JavaScript на следующий синтаксис:

window.open(url, '_blank', 'menubar=no')

Если это не сработает, попробуйте сначала создать скрипт, например:

Dim sb as New StringBuilder()
Do While r.Read()
    sb.AppendLine("window.open('" & r("AttachmentLink") & "', '_blank', 'menubar=no');")
Loop
ClientScript.RegisterStartupScript(Me.GetType(), "popup", sb.ToString(), True)

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

Отредактировано для добавления

Отвечая на комментарий, вы можете использовать что-то вроде этого:

sb.AppendLine("window.open('" & LoadPageLink(r("AttachmentLink")) & "' ... )")

Function LoadPageLink(path As String) As String
    Return String.Format("loadFile.aspx?p={0}", Server.UrlEncode(path))
End Function

----- LoadFile.aspx

Sub Page_Load(sender as Object, e as EventArgs)
    '*
    '* OK The worst part here is to detect the content-type of the file
    '* because it is being served by a proxy page, instead of directing 
    '* the browser to the actual file, which would make the IIS gess the
    '* content type and send the correct one. 
    '* 
    '* Getting the correct content type is beyond the scope of this answer
    '*

    Dim buffer as Byte(1024)

    Using (stream as New FileStream(Request("p")))
        Do While True
           Dim read = stream.Read(buffer, 0, buffer.Length)
           If (read > 0) Then
               Response.OutputStream.Write(buffer, 0, read)
           Else
               Exit Do
           End If
        End Do
    End Using

End Sub
0 голосов
/ 02 августа 2011

Это потому, что RegisterStartupScript относится к типам. Задумывались ли вы, почему вы должны предоставить Type type параметры в качестве первого параметра этого метода?

ASP.NET Framework использует этот тип в качестве ключа, и когда вы во второй раз пытаетесь добавить другой сценарий с того же типа и с тем же ключом , тогда он просто выиграл не добавляйте его, чтобы предотвратить дублирование скриптов, которые увеличивают ваши HTTP-запросы (хотя некоторые браузеры кэшируют первый запрос и не отправляют запрос на другие подобные скрипты) и снижают вашу производительность.

Однако, когда вы говорите, что на самом деле ничего не происходит, даже один раз, я предлагаю скопировать / вставить сгенерированный скрипт в Firebug и попытаться отладить его.

...