我正在尝试使用html文件输入来获取文件的路径和名称。我不想上传文件,因为文件可能非常大,我不想将文件数据传回服务器,只是为了获取文件名。
有没有办法将文件输入值绑定到我的模型中的属性,或者至少将文件名传递回服务器?
这是我的代码:
@using (Html.BeginForm("Upload", "Management", FormMethod.Post , new {enctype="multipart/form-data"})) {
<div>
Upload New Pricing Workbook: <input type="file" name="browse" id="browse" />
</div>
<div>Was Won: @Html.EditorFor(file => file.WasWon)</div>
<div>
<input type="submit" name="upload" id="upload" value="Upload" />
</div>
}
答案 0 :(得分:1)
有没有办法将文件输入值绑定到我的模型中的属性,或者至少将文件名传递回服务器?
你需要javascript。您可以在表单中包含一个隐藏字段,然后订阅表单的提交处理程序,并在此处理程序中设置隐藏字段的值,从文件输入字段的值中清除文件字段的值。此外,如果您对上传文件不感兴趣,则表格中不需要enctype
属性
$('form').submit(function() {
$('#someHiddenField').val($('#browse').val());
$('#browse').val('');
});
所有这些都说,出于安全原因,您无法使用javascript获取客户端计算机上文件的完整路径。您将只使用$('#browse').val()
获取文件名,这是您所希望的最佳文件。
如果你想获得路径,你可以包含一个标准输入字段,然后让用户输入。这样你就可以只在服务器上获得你需要的东西(某个文件的路径)。
答案 1 :(得分:0)
删除表单的enctype
属性应该足够了,文件名将作为upload
字符串参数填充在控制器操作中。
答案 2 :(得分:0)
这是一个肮脏的例子,应该足以让您更新/调整以满足您的需求:
型号:
public class HomeModel
{
public string ClientFileName { get; set; }
}
控制器:
public class homeController : Controller
{
//
// GET: /home/
public ActionResult Index()
{
HomeModel hm = new HomeModel();
if (Request.Form["selectedFilePath"] != null)
hm.ClientFileName = Request.Form["selectedFilePath"];
return View();
}
}
视图:
@{
ViewBag.Title = "Index";
}
<script type="text/javascript">
function getFileName() {
document.getElementById('selectedFilePath').value = document.getElementById('selectedFile').value;
}
</script>
<form method="post" action="/home/Index">
<input type="file" id="selectedFile" />
<input type="hidden" id="selectedFilePath" name="selectedFilePath" />
<button onclick="getFileName();">
Submit file name</button>
</form>