C# 如何在ASP.NET MVC中传递视图中的多个模型?
问题是:我想运行3个不同的操作,但我想在一个更大的模型中输入来自单个操作的所有数据 我正在使用: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
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>