2012-01-16 78 views
1

我正在開發一個使用MVC 2的內部項目管理儀表板。其中一個要求是鏈接到我們本地服務器上已有的文檔,換句話說,瀏覽到服務器,選擇文件,點擊添加,該項目的視圖將包含鏈接。這裏是我有(我已經留下了一些細節進行了簡潔):ASP .NET MVC 2 - 瀏覽並添加鏈接到文檔

型號:

public class AddDocumentModel 
{ 
    public HttpPostedFileBase DocumentLink { get; set; } 
} 

查看:

<% 
using (Html.BeginForm(MVC.ProjectDetails.Actions.AddDoc(this.Model.ProjectID), 
       FormMethod.Post, new { enctype = "multipart/form-data" })) 
{%> 

<%=Html.TextBoxFor(a => a.DocumentLink, 
        new { type = "file", style = "width:100%;"})%> 

    <input type="submit" value="Add Document Link" /> 
<%} %> 

控制器:

[AcceptVerbs(HttpVerbs.Post)] 
public virtual ActionResult AddDoc(AddDocumentModel docModel) 
{ 
    var model = _projectManagementService.AddDocumentLink(
         docModel.DocumentLink.FileName); 
} 

所以,正如你可以看到我使用HTML文本文件上傳,但實際上沒有上傳,只是試圖抓取路徑和文件名,並使用它作爲l墨水。然而,由於安全限制,這隻能在IE中使用,因爲沒有其他瀏覽器會讓你找到路徑。另外,如果用戶使用映射的驅動器,它將無法工作,因爲完整的路徑不會被使用,所以他們必須直接向服務器進行導航。

任何人都可以想到另一種方式來做到這一點?我希望能夠使用上傳功能提供的瀏覽功能,但不受限制。

目前我能想到的唯一(低科技)解決方案是讓用戶明確地將鏈接粘貼到文本框中。但寧願更友好的東西。

在此先感謝。首先發布的問題太多,所以請友好:-)

+0

如果我是在同樣的情況,那麼我只需要實現某種瀏覽Web應用程序內部的控制 - 也許TreeView是從服務器文件系統使用'System.DirectoryServices'中的功能填充的 – 2012-01-16 17:42:31

+0

謝謝謝爾蓋,我會有一個在這個名字空間中徘徊,看我是否可以使用任何東西 – 2012-01-17 14:04:41

回答

2

如果我是你,我會允許他們上傳一個新文件或粘貼在現有文件的位置。沒有理由嘗試重用文件上傳元素來做你正在做的事情。

形式示例(不喜歡寫出<%=Html %>

<form> 
    <div> 
     <input type="radio" name="AddDocumentType" value="New" /> 
     <label for="NewDocument">Upload New Document</label> 
     <input type="file" id="NewDocument" name="NewDocument" /> 
    </div> 
    <div> 
     <input type="radio" name="AddDocumentType" value="Link" /> 
     <label for="LinkDocument">Link To Existing Document</label> 
     <input type="text" id="LinkDocument" name="LinkDocument" /> 
    </div> 
    <input type="submit" value="Add Document Link" /> 
</form> 

型號

public enum AddDocumentType 
{ 
    New, 
    Link 
} 

public class AddDocumentModel 
{ 
    public AddDocumentType AddDocumentType { get; set; } 
    public HttpPostedFileBase NewDocument { get; set; } 
    public string LinkDocument { get; set; } 
} 
+0

+ 1作爲'<%=Html %>'懶惰... – gdoron 2012-01-16 17:48:28