2012-01-16 54 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