2009-07-07 39 views
6

Vì vậy, tôi đang làm việc trên một ứng dụng web Intranet bằng cách sử dụng ASP.NET MVC và tôi cần phải tạo liên kết đến một thư mục trên mạng. Vì vậy, ví dụ, giả sử tôi muốn tạo liên kết tới "C: \" và uri này được lưu trữ trong site.DocsPath. Tôi đã tìm cách dễ nhất để làm điều này chỉ tạo ra một liên kết thường xuyên, như thế này:Liên kết tới Danh bạ trên Mạng

<a href="file:///<%= site.DocsPath %>">Documents</a> 

này quyết tâm:

<a href="file:///C:\ruby">Documents</a> 

Tuy nhiên, khi bạn nhấp vào liên kết, có gì xảy ra. Về cơ bản nó giống như nhấp vào văn bản thông thường; hoàn toàn không có gì xảy ra. Không có chuyển hướng, không có gì. Tôi đã thử điều này trong cả Firefox và IE, và hành vi tương tự này xảy ra ở cả hai.

Ban đầu tôi nghĩ rằng đó có thể là dấu gạch chéo. Vì vậy, tôi đã dán file:///C:\ruby vào thanh địa chỉ để xem liệu nó có còn đúng hay không. Nó đã làm việc. Tôi đã thử điều này trong cả Firefox và IE, và nó hoạt động trong cả hai.

Vì vậy, bây giờ, tôi đang nghĩ "hey, có thể html của tôi không phù hợp vì một lý do nào đó". Vì vậy, tôi đã tạo một trang html nhỏ, như vậy:

<html> 
<head><title>Test Page</title></head> 
<body> 
    <a href="file:///C:\ruby">Documents</a> 
</body> 
</html> 

Và lo lắng ..... nó hoạt động. Tôi nhấp vào liên kết và nó thực sự theo liên kết. Và điều này làm việc trong cả Firefox và IE.

Vì vậy, bây giờ tôi đang bối rối. HTML là giống hệt nhau trong cả hai trường hợp (thông qua ASP.NET MVC và trong HTML tĩnh). Và chưa nó chỉ hoạt động trong trường hợp HTML tĩnh.


Bây giờ, tôi chỉ kéo ở ống hút. Tôi cố gắng chỉ dán

<a href="file:///C:\ruby">Documents</a> 

thẳng vào ViewPage trong ASP.NET MVC. Nope, không hoạt động.

Sau đó, tôi cố gắng dán chỉ là một trang web ngẫu nhiên tĩnh vào ViewPage, như:

<a href="http://www.google.com">Supreme Overlord of the Internet</a> 

Và đó làm việc. Vì vậy, bây giờ tôi đã xác nhận rằng ASP.NET thực sự có thể theo các liên kết được tạo bằng tay.

Bây giờ, không còn gì để làm, tôi làm điều gì đó điên rồ. tôi đặt liên kết đến một nơi nào đó không tồn tại, như:

<a href="file:///X:\this\doesnt\exist">I Hate ASP.NET MVC right now</a> 

Firefox dính vào súng của nó và không làm theo nó. Tuy nhiên, IE thực sự theo dõi nó và cung cấp cho tôi trang lỗi.Điều tương tự cũng sẽ xảy ra nếu site.DocsPath = "X:\this\doesnt\exist" và tôi đặt:

<a href="file:///<%= site.DocsPath %>">Documents</a> 




Vì vậy, bây giờ, tôi hoàn toàn nhầm lẫn. Tôi không biết những gì hiện tượng này đang diễn ra. Rõ ràng, ASP.NET MVC ghét tôi, điều đó gây rắc rối bởi vì tôi đã thể hiện nó không có gì ngoài tình yêu.

Nếu bất cứ ai có bất kỳ ý tưởng gì đang xảy ra, tôi sẽ đánh giá rất cao sự trợ giúp. Cảm ơn!


UPDATE: Sau nhiều thử nghiệm (và nhiều câu trả lời rất hữu ích và ý kiến ​​từ tất cả mọi người ở đây tại SO), tôi đã đi đến kết luận rằng chỉ cần tạo một liên kết bình thường vào thư mục chỉ sẽ không hoạt động. Cuối cùng tôi đã thử đặt trang html tĩnh mà tôi đã tạo ở trên trên máy chủ web và hóa ra nó không hoạt động. Tôi cũng tạo ra một ứng dụng Ruby on Rails và một ứng dụng PHP nhỏ và đã thử nó thông qua những ứng dụng đó, và nó cũng không hoạt động trên chúng. Vì vậy, khả năng duy nhất khác là nó thực tế là một thứ trình duyệt.

Tôi nghĩ rằng tôi sẽ theo đuổi có thể bằng cách nào đó kết nối với máy chủ SharePoint mà tất cả các tài liệu được quản lý bởi. Cảm ơn tất cả những người đã nhận xét và cung cấp các câu trả lời khác nhau về câu hỏi. Tôi chỉ có thể chọn một câu trả lời, nhưng nhận xét và câu trả lời của mọi người thực sự cung cấp một bức tranh rõ ràng về những gì đang diễn ra. Cảm ơn!

Trả lời

3

Đây là chi tiết của một bình luận hơn là một câu trả lời, nhưng tôi có thể' t comment ...

Đây không phải là câu hỏi asp.net-mvc. Đó là một câu hỏi về trình duyệt. Khi HTML được hiển thị, nó không quan trọng nếu nó được mã hóa cứng, .net hoặc cgi. Đừng ghét asp.net ...

Với điều đó được nói, tôi không nghĩ rằng bất kỳ ai khác có thể giúp bạn nếu bạn vượt qua bài đăng ở đó.

Xem xét các thử nghiệm của bạn, điều này chắc chắn giống như vấn đề bảo mật. Và điều đó cũng có ý nghĩa hoàn hảo.

Thêm vào đó, với một số googling, tôi thấy điều này:

http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/HTML/Q_20405367.html

Ít nhất trong IE (xem phản hồi từ MS dưới đây), đó là một thiết lập bảo mật cụ thể. Tôi sẽ tưởng tượng một cái gì đó tương tự trong FF và những người khác.

Vấn đề bạn đang gặp phải là một tính năng bảo mật mới trong Internet Explore 6 Service Pack 1. Để ngăn chặn Internet mã luẩn quẩn từ truy cập vào tập tin địa phương của bạn, nhóm phát triển phát triển bảo mật mới tính năng và bao gồm nó trong IE6 SP1. Xin lưu ý rằng điều này là một hành vi bình thường.

Thực ra, IE6 SP1 bao gồm kiểm tra mã bảo mật mới ngăn chặn "độ cao vùng". Điều này có nghĩa là các tài liệu nằm trong vùng "Internet" sẽ không được cấp quyền truy cập (thông qua HREF, tập lệnh ... v.v.) tới tài liệu trong vùng "Máy tính của tôi". Chỉ các tài liệu nằm trong khu vực "Tin cậy" hoặc "Máy tính của tôi" mới có thể truy cập tài liệu trong khu vực "Máy tính của tôi" .

Do đó, nếu bạn muốn cho phép tài liệu không tin cậy để truy cập tài liệu trong khu vực "My Computer", bạn có thể thêm URL nguồn trong "Trusted sites" (điều này phải được thực hiện một cách thận trọng đối với an ninh rõ ràng lý do). Vùng "Intranet cục bộ" cũng là cũng được tin cậy.

Bên cạnh đó, sau khóa registry cho phép vô hiệu hóa bảo mật mới mã kiểm tra ngăn chặn "vùng cao": - Bạn có thể tạo các khóa DWORD này và đặt nó bằng không để vô hiệu hóa tính năng này mới . Ngoài ra, bạn có thể bật tính năng này bằng cách thay đổi thành 1 bất kỳ lúc nào.

HKCU \ Software \ Microsoft \ Internet Explorer \ Main \ Disable_Local_Machine_Navigate = 0 REG_DWORD

Nó không được khuyến khích sử dụng trên khóa registry vì nó phá vỡ "vùng cao" bản vá bảo mật.

James

+0

Lol, tôi không thực sự ghét ASP.NET ... Tôi đã hơi thất vọng với điều này vấn đề khi tôi viết bài. Tôi đã thử làm điều này với Rails, và tôi có cùng một lỗi, vì vậy tôi đoán đó là một điều trình duyệt. Tuy nhiên, nó vẫn còn thực sự kỳ lạ mà nó cho phép html tĩnh để truy cập các tập tin địa phương. Dù sao, cảm ơn bạn đã bao gồm một tham chiếu thực tế cho vấn đề. – thebrokencube

+2

Tôi không nghĩ rằng nó cho phép "html tĩnh" ... nó có thể cho phép một tập tin địa phương để truy cập vào một tập tin địa phương. Hãy thử phân phối thông qua máy chủ web của bạn. Có nghĩa là một tệp: // có thể trỏ đến một tệp khác (duyệt web cục bộ từ một cd chẳng hạn) nhưng không phải http: // -> tệp: //. .......... Tôi nhận ra bạn không ghét mvc;) Nếu chỉ có tôi đã lưu tất cả mã thử nghiệm của mình với "tại sao f **** không hoạt động?", "F **************** ck! ", v.v. –

+0

Bạn nói đúng; Tôi đã thử nghiệm nó trên một máy chủ web và nó không hoạt động. Tôi đoán tôi sẽ phải sủa một cây khác để có được chức năng này để làm việc. Cảm ơn đã giúp đỡ! – thebrokencube

1

Đặt site.site.DocsPath a System.Uri. vì thế khi tạo DocsPath làm như sau

DocsPath = new Uri("C:\\ruby"); 

sau đó khi bạn làm

<a href="<%= site.site.DocsPath %>">Documents</a> 

nó sẽ ra

<a href="file://C:\ruby">Documents</a> 

Nhưng cũng giống như một mặt lưu ý, bạn sẽ không thể để phục vụ này bên ngoài từ trang. Nếu bạn cần phân phối tài liệu trên web, bạn cần thiết lập giao diện thân thiện với internet. Chẳng hạn như trang lấy dữ liệu đầu vào làm tài liệu và sau đó phản hồi.Gửi lại tài liệu cho trình duyệt thông qua trình xử lý của một số loại.

+0

Hmm ... Tôi đã thử điều đó, và nó không hoạt động = /. Nó cũng giống như những gì tôi đã thử. Nhưng tôi biết rằng điều này sẽ không hoạt động bình thường trên web. Tôi sẽ làm rõ những gì tôi đang cố gắng làm trong bài đăng gốc của mình. Cảm ơn! – thebrokencube

2

Có thể một số hạn chế bảo mật trong trình duyệt. Bạn đã thử các trình duyệt khác chưa?

+0

Vâng, tôi đã thử nó trong cả Firefox và IE. Tôi sẽ làm rõ vấn đề của mình nhiều hơn một chút trong bài đăng gốc. Cảm ơn! – thebrokencube

+1

Tôi nghĩ điều này là do thiết kế, như một tính năng bảo mật. –

+0

Vâng, tôi đã làm cho nó hoạt động ở nơi khác. Nó hoạt động trong một trang html tĩnh, và tôi cũng đã nhận được nó để làm việc trong đường ray trước đây bằng cách chỉ làm điều đó một cách trực quan. – thebrokencube

1

Tôi cũng đã thử nó không hoạt động theo cách của bạn. Tại sao bạn không thử cách này, File Upload Download, ở đây bạn có thể sử dụng phần tải xuống và trong khi tải xuống, nó sẽ hỏi bạn có muốn mở nó hay không.

+1

Trên thực tế nó trông phức tạp nhưng nó rất đơn giản, và một điều nữa mã có sử dụng BinaryContentResult như kiểu trả về và ông đã bắt nguồn từ ActionResult, nhưng phiên bản hiện tại của ASP.NET MVC có FilePathResult như kiểu trả về cho hành động, nó làm cho nó rất đơn giản. – San

+0

Đúng nếu tôi sai, nhưng có vẻ như giải pháp được trình bày trong bài đăng trên blog đó thực sự "truy xuất" những tệp đó để bạn có thể liệt kê chúng trên trang web của mình, trong khi tất cả những gì tôi muốn làm là để trình duyệt xử lý nó. tức là nếu bạn vừa nhập vào một cái gì đó như C: \ vào thanh địa chỉ của Firefox, nó sẽ xử lý nó (tương tự như vậy, IE sẽ chỉ mở một cửa sổ thám hiểm cửa sổ). – thebrokencube

+1

Có thực sự của nó lấy các tập tin, nó không phải để làm với trình duyệt. Ban đầu nó sẽ hiển thị tất cả tên tệp dưới dạng liên kết, trên trang web, khi bạn nhấp vào liên kết, nó sẽ cung cấp cho bạn tùy chọn lưu hoặc mở tệp. – San

1

Có thể có sự cố khi chuyển hướng từ IE sang thư mục. Thử có thể chuyển hướng đến tệp cục bộ bằng cách sử dụng tệp: /// - hiện công việc này:

<a href="file:///C:\ruby.html">Document</a> 

?

Nếu có, cố gắng có lẽ gắn bó một gạch chéo để URL của bạn:

<a href="file:///C:\ruby\">Documents</a> 

Hoặc sử dụng những dấu xồ nguợc:

<a href="file:///C:/ruby/">Documents</a> 
+0

Tôi đã thử chỉ liên kết đến một tệp bình thường, nhưng nó không hoạt động. Như tôi đã lưu ý trong câu hỏi của mình, nếu tôi lấy liên kết HOẠT ĐỘNG trong html tĩnh và sao chép chính xác như trong trang xem, nó KHÔNG LÀM VIỆC. Giống như, liên kết tồn tại, nhưng khi bạn nhấp vào nó, hoàn toàn không có gì xảy ra. Không có chuyển hướng, không có trang lỗi, không có gì. – thebrokencube

+1

Vâng, tôi hiểu những gì bạn đang hỏi. Liên kết sẽ hoạt động nếu tệp tồn tại và bạn đang nhấp vào liên kết này trên cùng một máy tính chứa tệp đó. Ngoài ra, nó chỉ hoạt động nếu trang có liên kết cũng được mở cục bộ. Nếu phục vụ bởi một máy chủ web (địa phương hay không), nó sẽ không hoạt động. Có lẽ bạn vẫn có thể làm cho nó hoạt động bằng cách làm cho trang web đó đáng tin cậy trong trình duyệt của bạn, nhưng tôi không chắc chắn 100% sẽ hoạt động. – synhershko

+0

Vâng, tôi không có ý tưởng làm thế nào để làm cho trang web đáng tin cậy trong trình duyệt của tôi (hoặc thậm chí làm thế nào mà sẽ giúp). Tại thời điểm này tôi khá nhiều dưới ấn tượng rằng có một cái gì đó tôi cần phải cấu hình trên máy chủ web để nó cho phép các liên kết địa phương sau đây. – thebrokencube

2

tôi đã chỉ làm việc trên một vấn đề tương tự và đã đưa ra các giải pháp sau đây. Tôi đang sử dụng ASP.NET nhưng không ASP.NET MVC; Tuy nhiên, từ những gì tôi biết và những gì tôi đọc, điều này cũng nên làm việc cho ASP.NET MVC. Đầu tiên, tạo liên kết của bạn như thế này:

<a ID="A1" runat="server">Documents</a> 

Sau đó, trong codebehind (giả sử codebehind là trong C#), trong Page_Load thiết lập một sự kiện click:

A1.ServerClick += A1_ServerClick; 

Và có một sự kiện nhấp chuột như thế này:

protected void A1_ServerClick(object sender, EventArgs e) 
{ 
System.Diagnostics.Process.Start("C:\\ruby"); 
} 

System.Diagnostics.Process.Start sẽ chỉ cần mở một thư mục. Để tránh các vấn đề với thư mục không tồn tại, bạn có thể kiểm tra sự tồn tại của Directory.Exists ("C: \ ruby") và tạo thư mục nếu nó không tồn tại với Directory.CreateDirectory ("C: \ ruby")

Các vấn đề liên quan