2011-02-09 95 views
2

我有一個在頁面加載事件上動態創建的ASP表。在這種情況下,我使用標題填充ASP表格,然後使用指向.ashx頁面的ASP .NET Hyperlink控件來爲客戶端下載文件。來自ASP .NET的Javascript函數調用超鏈接NavigateURL屬性

對於特定的文件(圖像文件),我想啓動一個javascript函數來打開一個顯示該文件的新窗口。我有所有的代碼來做到這一點,但我無法讓我的Javascript函數在超鏈接NavigateURL屬性中工作。我對JavaScript很陌生,所以我不確定我錯過了什麼。我可以做我想做的事嗎?我可以不使用桌子控制嗎?

ASP代碼背後

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Dim iWineID As Integer 

    If Not Integer.TryParse(Request.Params("WineID"), iWineID) Then Throw New InvalidOperationException("Invalid request") 
    Me.lblWineName.Text = Utils.GetWineName(iWineID) 
    Dim dtDocs As New dsDocs.docsDataTable 

    Using taDocs As New dsDocsTableAdapters.docsTableAdapter 
     dtDocs = taDocs.GetDataByProdIDOrWineID((Utils.GetProducerIDByWineID(iWineID)), True, iWineID) 
    End Using 

    If dtDocs.Rows.Count = 0 Then 
     Me.lblDocsFound.Text = "No documents available for this wine." 
    Else 
     Me.NumberDocs(dtDocs) 

     For Each drDoc As dsDocs.docsRow In dtDocs 
      Dim myRow As New TableRow 
      Dim myTitleCell As New TableCell 
      Dim myDLCell As New TableCell 
      Dim myHL As New HyperLink 
      Select Case drDoc.doc_type_id 
       'window.open('preview.aspx?WineID=' + nWineID', 'height=' + nWindowHeight + ',width=' + nWindowWidth + ',status=no,toolbar=no,menubar=no,location=no,scrollbars=' + bScrollbars + ',resizable=' + bScrollbars + ',titlebar=no'); 
       Case Constants.DocType.BottleShot, Constants.DocType.Label, Constants.DocType.Logo 
        myHL.NavigateUrl = "javascript:OpenPrev('" & drDoc.doc_id & "');return false;" '"javascript:window.open('~/Home/docpreview.aspx?DocID=" & drDoc.doc_id '& "','_blank', 'height=600, width=600,status=no,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=no,titlebar=no'" 
        '"~/Home/docpreview.aspx?DocID=" & drDoc.doc_id 
        myHL.Text = "View" 
       Case Else 
        myHL.NavigateUrl = "~/Home/docs.ashx?DocID=" & drDoc.doc_id 
        myHL.Text = "Download" 
      End Select 

      myTitleCell.Text = StrConv(drDoc.doc_type_name, VbStrConv.ProperCase) 
      myDLCell.Controls.Add(myHL) 
      myRow.Cells.Add(myTitleCell) 
      myRow.Cells.Add(myDLCell) 
      Me.tableDocs.Rows.Add(myRow) 
     Next 
    End If 
End Sub 

的Javascript

function OpenPrev(DocID){ 

var objWin 
var myURL 

alert("GO!"); 
myURL='~/Home/docpreview.aspx?DocID=' + DocID; 
objWin=window.open(myURL, 'Doc View', 'width=600,height=600,resizable=no,scrollbars=yes,toolbar=no'); 
} 
+1

沒有挖得太深,只是一個快速件事:JavaScript不理解的概念` 〜「 - 這是一個.NET概念,僅在服務器代碼中提供。 – 2011-02-09 14:35:47

回答

0

@JoeEnos - 這絕對是它的一部分。嘗試使用諸如「http://www.google.com」之類的內容作爲myURL並參閱。怎麼了。

並查看HTML頁面的來源並查看生成的超鏈接的樣子。 href屬性可能看起來不對。

+0

我通過嘗試另一個網址得到了這個工作。我再次嘗試了,它工作。我在工作時使用了Firefox,然後我使用了Chrome瀏覽器,並且它沒有任何問題 - 但是沒有使用Firefox的骰子。任何想法爲什麼這可能是? – user576838 2011-02-11 04:35:15

2

您需要先解析網址。

試着改變你設置NavigateURL喜歡的任何地方:

myHL.NavigateUrl = "~/Home/docs.ashx?DocID=" & drDoc.doc_id 

要:

myHL.NavigateUrl = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Authority + HttpContext.Current.Request.ApplicationPath + "Home/docs.ashx?DocID=" & drDoc.doc_id