[英]Creating a listbox in a modal with files from a directory?
我试图从目录中抓取文件,并且我试图让用户从列表中选择一个文件以供以后处理。
这是获取文件的代码。
[HttpGet]
public ActionResult GetFiles()
{
DirectoryInfo dinfo = new DirectoryInfo(@"C:\TestDirectory");
List<FileInfo> Files = dinfo.GetFiles("*.txt").ToList();
return PartialView("_File", Files);
}
这是现在将在模态中的部分视图。
@model List<FileInfo>
@Html.ListBoxFor(model => model, new SelectList(Model).AsEnumerable())
我如何从主视图调用局部视图:
<div class="row">
<div class="modal fade" id="bootstrapDialog" tabindex="-1" role="dialog" aria-labelledby="myModal-label" aria-hidden="true"></div>
</div>
<div class="btn btn-default browseButton">
<span class="glyphicon glyphicon-folder-open browseDialog" data-url="@Url.Action("GetFiles","Home", null)"></span>
<span class="browseDialog" data-url="@Url.Action("GetFiles","Home", null)">Browse...</span>
</div>
@section scripts {
<script>
$(document).ready(function () {
$('.browseDialog').click(function () {
var url = $(this).data('url');
$.get(url, function (data) {
$('#bootstrapDialog').html(data);
$('#bootstrapDialog').modal('show');
});
});
});
</script>
}
正在检索文件信息,但未创建列表框。 列表框给出了一个除了值不能为空或为空。 我是否必须创建其他必须传递到此列表框的内容?
我如何允许用户选择一个项目以传递回屏幕后面的模式以填充文本框?
@model List<FileInfo>
和new SelectList(Model).AsEnumerable()
用法似乎都是错误的,因为您没有指定要在列表中填充的文本和值。 您应该使用如下设置创建一个视图模型:
public class ViewModel
{
// other properties
public string SelectedFile { get; set; }
// options list
public IEnumerable<SelectListItem> FilesList { get; set; }
}
然后,在您的控制器操作中,通过使用Select()
扩展方法并选择Name
属性作为选项文本和值,从List<FileInfo>
创建List<SelectListItem>
实例:
[HttpGet]
public ActionResult GetFiles()
{
DirectoryInfo dinfo = new DirectoryInfo(@"C:\TestDirectory");
List<FileInfo> Files = dinfo.GetFiles("*.txt").ToList();
var model = new ViewModel();
// use file name to generate option list
model.FilesList = Files.Select(x => new SelectListItem { Text = x.Name, Value = x.Name }).ToList();
return PartialView("_File", model);
}
最后,使用从FilesList
属性填充的列表创建一个DropDownListFor
助手:
@model ViewModel
@Html.DropDownListFor(model => model.SelectedFile, Model.FilesList, ...)
之后,您可以使用上述string
属性检索所选文件,例如Server.MapPath()
。
补充说明:
如果要选择多个文件名而不是单个文件名,请使用IEnumerable<string>
属性和ListBoxFor
助手:
视图模型
public IEnumerable<string> SelectedFiles { get; set; }
看法
@Html.ListBoxFor(model => model.SelectedFiles, Model.FilesList, ...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.