C# 如何在ASP.NET MVC中传递视图中的多个模型?

C# 如何在ASP.NET MVC中传递视图中的多个模型?,c#,asp.net,asp.net-mvc,linq,view,C#,Asp.net,Asp.net Mvc,Linq,View,问题是:我想运行3个不同的操作,但我想在一个更大的模型中输入来自单个操作的所有数据 我正在使用: public class SearchScrapClass { public WClass WClass { get; set; } public SClass SClass { get; set; } public YClass YClass { get; set; } } public class WClass

问题是:我想运行3个不同的操作,但我想在一个更大的模型中输入来自单个操作的所有数据

我正在使用:

public class SearchScrapClass
    {
        public WClass WClass { get; set; }
        public SClass SClass { get; set; }
        public YClass YClass { get; set; }
    }

    public class WClass 
    {
        public string title { get; set; }
        public string link { get; set; }
    }
    public class SClass 
    {
        public string title { get; set; }
        public string link { get; set; }
    }
    public class YClass 
    {
        public string title { get; set; }
        public string link { get; set; }
    }
我正在使用LINQ在这些模型中添加数据

我正在使用:

      var wikians = from info in document.DocumentNode.SelectNodes("//div[@id='span']")
        from link in info.SelectNodes("div//a").Where(x => x.Attributes.Contains("href"))
         select new SearchScrapClass //Main Bigger Class
         {
            WClass.link= link.Attributes["href"].Value, //ERROR: How to add to WClass's url ?
            WClass.title= link.InnerText //ERROR: How to add to WClass's url ?
         }


var wikians = from info in document.DocumentNode.SelectNodes("//div[@id='results']")
               from link in info.SelectNodes("p//a").Where(x => x.Attributes.Contains("href"))
               select new SearchScrapClass //Main Bigger Class
                 {
                   YClass.link= link.Attributes["href"].Value, //ERROR: How to add to YClass's url ?
                   YClass.title= link.InnerText //ERROR: How to add to YClass's url ?
                 }

//Also for the 3rd class (model)


    return View(wikians); //and then return bigger class model so that i can access them in view
这是我想向所有类的链接和标题添加数据的一种方法

我的尝试是将数据从不同来源添加到所有3个类中,并将较大的模型传递给视图,以便我可以访问所有类,如下所示:

@model SearchScrapClass
@using(Html.BeginForm()) {
    @Html.EditorFor(o => o.WClass.link)
    ...
}
请建议一条路


谢谢

您可以通过创建包含多个对象的新模型类来传递多个模型

public class MultiModel 
    {
     SearchScrapClass searchScrap;
     WClass wClass;
     SClass sClass;
     YClass yClass;
    }

为了扩展我的评论,我建议为组织起见创建一个ViewModel文件夹。在此对话框中,添加视图模型

public class SearchScrapClassViewModel
{
    SearchScrapClass searchScrap;
    WClass wClass;
    SClass sClass;
    YClass yClass;
}
然后在控制器中实例化新的viewmodel

SearchScrapClassViewModel model = new SearchScrapClassViewModel
{
    ....add in your logic to fill your class objects here


}

return view(model);
然后在视图中为viewmodel添加using

@using SearchScrapClassViewModel
我们在这里应用什么逻辑“…在这里添加逻辑以填充类对象”

请参阅元组教程或本教程

类似控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var first = new FirstModel();
        var second = new SecondModel();
        return View(Tuple.Create(first,second));
    }
}
以及以下观点:

@模型元组

<div> 
    @Model.Item1.FirstModelProp
    @Model.Item2.SecondModelProp
</div>

@Model.Item1.FirstModelProp
@Model.Item2.SecondModelProp

创建一个将所有三个模型连接在一起的viewmodel,并将视图键入该viewmodel。我不明白为什么有三个看起来相同的不同类?为什么不使用同一类的3个不同实例呢?@hermiod:实际上,我展示的逻辑看起来很相似[几乎没有修改],但它们获取url和内容的来源不同。所以我需要不同的课程。@Brian是对的。在MVC中执行此操作的“正确”方法是创建包含这三个类的ViewModel。这些类是数据模型。ViewModel是另一种东西,它应该包含视图正确渲染所需的所有内容。那么您如何在视图中接收/使用该类?Brian已经进一步解释了这一点,您可以在视图中使用Modal访问每个类,例如@Model.SearchScrapClass,Modal.wclass请详细说明视图方面的内容。如何分别访问视图中的每个元素w、s、y?
<div> 
    @Model.Item1.FirstModelProp
    @Model.Item2.SecondModelProp
</div>