我正在使用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文本框进行文件上传但实际上没有上传,只是尝试获取路径和文件名并将其用作链接。但是由于安全限制,这只能在IE中使用,因为没有其他浏览器可以让你走上这条路。此外,如果用户使用映射驱动器,它将无法工作,因为不会使用完整路径,因此他们必须直接导航到服务器。
有人能想到另一种方法吗?我希望能够使用上传功能提供的浏览功能,但不受限制。
目前我能想到的唯一(低技术)解决方案是让用户明确地将链接粘贴到文本框中。但是更喜欢更友好的东西。
提前致谢。首先发布的问题,所以要善良: - )
答案 0 :(得分: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; }
}