将IEnumerable发送到已包含模型的视图

时间:2012-12-04 14:02:20

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

这是视图:

@model tgpwebged.Models.sistema_DocType
 ...

此模型是与textBoxFor和其他html助手一起使用的实体

这是控制器。

public ActionResult AdminSettingAddTipo()
{
    IEnumerable<string> indices;

    using (tgpwebgedEntities context = new tgpwebgedEntities())
    {
        var obj = from u in context.sistema_Indexes select u.idName;
         indices = obj.ToList();
    }

    return PartialView(indices);
}

我有我需要的所有东西,我正在使用模型来创建视图,因此我不允许将'indices'作为模型发送,因为在一个视图中不允许有2个模型。

我现在不想使用'Tupe'作为父视图。我只是想知道将IEnumerable发送到视图的最佳方法是什么。

我在考虑使用ViewBag作为最后一个选项,但我正在避免使用ViewBag。

谢谢

3 个答案:

答案 0 :(得分:2)

ViewBag不是一个好选择。使用列表和当前模型创建ViewModel:

    public class YourViewModel
    {

        public sistema_DocType Type { get; set; }
        public IEnumerable<string> Indices {get;set;}
    }

希望,这会有所帮助。

答案 1 :(得分:1)

如果您因任何原因不想使用ViewBag,可以专门为包含旧模型信息和所需新索引的视图创建模型。这是MVC开发中的常见模式。您甚至可以将ViewModel作为当前模型的装饰器。

http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx

答案 2 :(得分:0)

尽可能使用强定义,将其应用于模型并发送该模型:

<强>模型

public class MyModel{
     public List<sistema_Indexes> indecies {get;set;}

}

<强>控制器

MyModel model = new MyModel();
model.indecies = context.sistema_Indexes.Select(u=> u.idName).ToList();