我的下拉列表目前已填写如此,并与我的模型employeeModel
互动:
@Html.DropDownListFor(x => employeeModel.JobTitle,
new SelectList(
new List<Object>
{
new { value = "Job Title 1", text = "Job Title 1"},
new { value = "Job Title 2", text = "Job Title 2"},
new { value = "Job Title 3", text = "Job Title 3"},
new { value = "Job Title 4", text = "Job Title 4"}
},
"value",
"text",
0), "Select...", new { @class = "form-control" })
但是,我需要一种方法,这样我就可以比手动手动完成更容易填写。我想到的最简单的方法是通过CSV文件。但是,我不知道如何让我的用户上传文件,然后获取它的所有内容,以便它可以填充上面的代码片段。
以前有没有人做过这样的事情?
答案 0 :(得分:2)
您可以添加上传字段,用户可以在其中选择包含作业列表的文本文件。在这种情况下,我假设文件看起来像这样:
Job Title 1
Job Title 2
Job Title 3
Job Title 4
Job Title 5
在您的控制器中,您必须获取属性值并将其从相对Uri路径转换为绝对文件路径。然后使用StreamReader读取文件并将项添加到列表中,然后使用这些值创建SelectListItems列表并将其添加到employeeModel
。
var fileUri = CurrentPage.GetPropertyValue<string>("jobFile");
var filePath = System.Web.HttpContext.Current.Server.MapPath(fileUri);
var values = new List<string>();
using (var reader = new StreamReader(filePath))
{
values = reader.ReadToEnd().Split(new string[] { "\r\n" }, StringSplitOptions.None).ToList();
}
employeeModel.Jobs = values.Select(x =>
{
return new SelectListItem
{
Value = x,
Text = x
};
});
最后,在视图中渲染下拉列表:
@Html.DropDownListFor(x => x.JobTitle, Model.Jobs, "Select...", new { @class = "form-control" })