在View ASP.NET中传递更多多个查询

时间:2015-06-25 14:25:38

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

在我的Repository类中,我有两个查询,我希望它只出现在一个视图中:

public ClassXXXX GetxxxoList(string Name)
{
    return context.ClassXXXX.Where(v => v.Name == Name).Single();
}

我在Repository类中的第二个查询:

public IEnumerable<ClassXXXX> List()
{
    return context.ClassXXXX.ToList();
}

然后在我看来我这样做:

@model IEnumerable<Namespace.Models.ClassXXXX>

@model Namespace.Models.ClassXXXX

分别在我的视图中返回两个查询。 但ASP.NET在一个视图中两次使用@model会引发异常。

2 个答案:

答案 0 :(得分:1)

而不是:

@model IEnumerable<Namespace.Models.ClassXXXX>
@model Namespace.Models.ClassXXXX

您可以创建一个ViewModel类,其中包含您需要的所有数据:

public class YourContextViewModel
{
    public List<Person> Person { get; set; }
    public string UserName{get;set;}
    ...
}

创建ViewModel对象以填充视图是个好主意。

答案 1 :(得分:0)

我建议:

创建一个封装两个模型的新模型。在Models命名空间

中创建ModelXXXX模型
public class ModelXXXX
{
    public ModelXXXX(ClassXXXX singleXXXX, List<SingleXXXX> listXXXX)
    {
        SingleXXXX = singleXXXX;
        ListXXXX = listXXXX;
    }

    public ClassXXXX SingleXXXX { get; set; };
    public IList<ClassXXXX> ListXXXX { get; set; }
}

然后在控制器中你会有类似的东西:

public virtual ActionResult Index()     
{
    [...]
    string name = "name";
    ModelXXXX model = new ModelXXXX(GetxxxoList(name), List());

    return View("..Views/Index.cshtml", model)
}

最后,你会看到:

@model Namespace.Models.ModelXXXX

[...]
@Model.SingleXXXX 
@Model.ListXXXX

第一个(@ Model.SingleXXXX)的值为@model Namespace.Models.ClassXXXX

第二个(@ Model.SingleXXXX)将具有@model IEnumerable的值