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

本文关键字:查询 View ASP NET | 更新日期: 2023-09-27 17:59:55

在我的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时抛出异常。

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

而不是:

@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对象来填充视图。

我建议:

创建一个封装两个模型的新模型。在模型名称空间中创建模型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