如何从mvc中的一个Index控制器方法返回多个模型对象?

时间:2013-12-29 17:49:13

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

我有controller.cs代码:

public class GroupsController : Controller
    {
        public ActionResult Index()
        {
            GroupTypeRepository groupTypeRepo = new GroupTypeRepository();

            var groupTypeNames = groupTypeRepo.GetAll().ToList();

    //like GroupType I have Group also so i want to pass both GroupType and Group object to my below return View("Groups", groupTypeNames);
        // how can i do this?

            return View("Groups", groupTypeNames);
        }

我在/Model Folder in Model.cs进行了尝试,但不是很好的方法请指导如何实现这一目标? 谢谢

2 个答案:

答案 0 :(得分:4)

您无法从控制器操作返回多个模型。你要做的是定义一个包含所有必要信息的视图模型,然后返回这个视图模型。

例如:

public class MyViewModel
{
    public List<string> GroupTypeNames { get; set; }
    public string SomeOtherProperty { get; set; }
}

然后:

public ActionResult Index()
{
     GroupTypeRepository groupTypeRepo = new GroupTypeRepository();

     var model = new MyViewModel();
     model.GroupTypeNames = groupTypeRepo.GetAll().ToList();
     model.SomeOtherProperty = "some other property value";

     return View("Groups", model);
}

当然,您的视图应该输入到视图模型中:

@model MyViewModel

如果您想访问某些属性:

@foreach (var item in Model.GroupTypeNames)
{
    <div>@item</div>
}

或:

@model.SomeOtherProperty

答案 1 :(得分:1)

使用PartialResult您可以将复杂代码划分为多个Partials。例如,这里是代码。

 public class Type1
    {
        public struct Test
        {

        }
    }

    public class Type2
    {
    }

这是我在部分

中使用的代码
@using MVC5.Models

@model  List<Type1.Test>

在另一部分中你可以调用type2。

现在在Controller中执行此操作

   public PartialViewResult Partial1()
        {
            ViewData.Model = new List<Type1.Test>();
            return PartialView();
        }

现在在我的index.cshtml

@{
    ViewBag.Title = "Index";
}

@{
    Html.Action("Partial1","Home");   
}

我在我的索引ActionResult中调用了partial1。使用此实现,您可以在您拥有的每个部分结构中使用模型。

正如darin所说,拨打一个包含所有这些子数据的电话,并将它们从控制器传递给模型。

我想建议您通过ViewData或ViewBag传递View上的多个数据(ViewBag是动态的)。请参阅此帖子http://www.rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications