【问题标题】:MVC3 Pass additional data from ctrl to viewMVC3 将额外数据从 ctrl 传递给视图
【发布时间】:2011-11-11 03:07:33
【问题描述】:

如果我要将其他数据(模型除外)传递到我的视图中,例如特定文件夹中的文件列表,那么最好的方法是什么?

我正在考虑创建一个方法并将列表返回到ViewData

        public List<string> GetFiles(int id, string cat)
    {
        var files = new List<string>();

        var folder = "~/App_Data/uploads/" + cat + "/" + id.ToString();
        foreach (var file in Directory.GetFiles(folder))
        {
            files.Add(file);
        }
        return files;
    }

控制器:

ViewData["files"] = db.GetFiles(id, "random");

观点:

@foreach (var item in ViewData["files"]){ //markup }

首先,我听说不应使用 viewdata 和 viewbag。其次,此代码不起作用。带有 Viewdata 对象的东西是不可枚举的。我应该为这些文件创建一个模型类。如果是这样,怎么做?一个视图中有 2 个模型?我有点困惑如何做到这一点。

【问题讨论】:

    标签: asp.net-mvc-3 razor .net viewdata


    【解决方案1】:

    如果我要将其他数据(模型除外)传递到我的视图中, 比如说一个特定文件夹中的文件列表,什么是最好的方法 这样做?

    编写一个视图模型,它将包含您的视图所需的所有属性,并让您的控制器操作将此视图模型传递给视图。所以:

    public class MyViewModel
    {
        public List<string> Files { get; set; }
    
        public string Foo { get; set; }
    
        ... some other properties that your view might need
    }
    

    然后是控制器:

    public ActionResult Index(int id)
    {
        var model = new MyViewModel
        {
            Files = db.GetFiles(id, "random"),
            Foo = "bar"
        };
        return View(model);
    }
    

    最后在你的强类型视图中:

    @model MyViewModel
    @foreach (var file in Model.Files)
    {
        <div>@file</div>
    }
    
    <div>@Html.DisplayFor(x => x.Foo)</div>
    

    【讨论】:

    • 酷,非常直接。伙计,我今天想不通。谢了哥们。我试试看
    • 一个问题。我不明白那是怎样的附加数据。您将“模型”传递给视图,但我已经有另一个视图模型正在传递给视图。
    • 我应该做一个局部视图吗?
    • @Kasper Skov,将您的 other 模型添加为我的属性。然后让控制器操作对其进行初始化。然后在您看来,您将可以访问它。你当然可以为它制作一个局部视图,并在主视图中调用这个局部视图:@Html.Partial("_SomePartial", Model.SomeProperty)
    • @Kasper Skov,像这样:var model = new MyViewModel { Annonce = db.Annoncer.Find(id), Files = db.GetFiles(id, "random") }; return View(model);。在此示例中,您将 Annonce 属性声明给 MyViewModel 类并为其赋值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 2011-03-06
    相关资源
    最近更新 更多