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

时间:2014-06-03 14:01:19

标签: c# asp.net-mvc-4

我在控制器和视图之间进行通信时遇到了一些问题。

UploadFile (Class):

    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>();
    }
}

控制器:(我通过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");

结果:(强类型视图)

@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时,我无法转到列表某些索引中的文件(我有上传文件实例)。

我需要foreach声明:foreach var item in model.list但它不会让我,我该怎么办?

我的主要目标是在表格中简单地显示模型列表中每个UploadFile的详细信息(&#34; Files&#34;)。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

是的,我需要使用您在.list中定义的Files属性,并且需要将视图模型更改为

@model SelectorITSelectorIT.Models.Files

...

@foreach (var item in Model.list) {
    <tr>
        <td>@item.Name</td>
    </tr>
}

另一方面,如果你真的想要一个IEnumerable的文件,你需要重写你的循环,类似于:

@foreach (var item in Model) {
    foreach(var file in item.list)
    {
        <tr>
            <td>@file.Name</td>
        </tr>
    }
}

但根据您的问题,我认为您真的只想要Files的模型,因为它已经包含UploadFiles的列表。

答案 1 :(得分:1)

你说“我不能去列表的某个索引中的文件”

如果要显示需要使用For循环的特定索引范围,则无法索引foreach循环,

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