使用强类型模型在控制器和视图之间传递数据

本文关键字:之间 视图 数据 控制器 强类型 模型 | 更新日期: 2023-09-27 18:06:20

控制器和视图之间的通信有一点问题。

还是(类):

    public class UploadFile
    {
        public string OrignialFilePath { get; set; }
        public string FilteredFilePath { get; set; }
        public string Name { get; set; } 
        public UploadFile(string x, string y, string z)
        {
            OrignialFilePath = x;
            FilteredFilePath = y;
            Name = z;
        } 
    }
文件

(类):

 public class Files
{
    public List<UploadFile> list { get; set; }
    public Files()
    {
        list = new List<UploadFile>();
    }
}

Controller:(我用HTTP POST获取文件到这个控制器)

  Files fileList = new Files();
        foreach (var file in Files)
        {
            UploadFile fu = new UploadFile(file.x, file.y, file.z); 
            fileList.list.Add(fu);
        }
        return RedirectToAction("Result");

Result:(强类型视图)

@model IEnumerable<SelectorITSelectorIT.Models.Files>
@{
    ViewBag.Title = "Result";
}
<h2>SelectorIT - Result</h2>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th></th>
    </tr>
@foreach ( var item in Model) {
    <tr>
        <td>
            @item.list  ?????
        </td>
    </tr>
}
</table>

foreach var item in model

当我写@item.list时,我不能去列表的一些索引内的文件(我有那里的UploadFile实例)。

我需要在foreach声明:foreach var item in model.list,但它不让我,我怎么能做到这一点?

我的主要目标是简单地在表中显示关于模型列表("文件")中每个UploadFile的详细信息。

我该怎么做呢?

使用强类型模型在控制器和视图之间传递数据

是的,如果你需要使用Files中定义的.list属性并且你需要将视图模型更改为简单的

@model SelectorITSelectorIT.Models.Files
...
@foreach (var item in Model.list) {
    <tr>
        <td>@item.Name</td>
    </tr>
}
另一方面,如果你真的需要一个IEnumerable of Files,你需要像这样重写你的循环:
@foreach (var item in Model) {
    foreach(var file in item.list)
    {
        <tr>
            <td>@file.Name</td>
        </tr>
    }
}

但是根据你的问题,我认为你真的只是想要一个Files的模型,因为它已经有UploadFiles的列表在里面。

你说"我不能到列表的某个索引内的文件"

你不能索引一个foreach循环,如果你想显示一个特定范围的索引,你需要使用For循环,

for (int i = 0; i < Model.list.Count; i++)
{
  @Html.LabelFor(x => Model.list[i].Name)   
}