【问题标题】:How to pass multiple model in view in ASP.NET MVC?如何在 ASP.NET MVC 中传递多个模型?
【发布时间】:2012-06-09 16:59:10
【问题描述】:

问题是:我想运行 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

这是我想将数据添加到所有类的 linktitle 的一种方式。

我的尝试是将数据添加到来自不同来源的所有 3 个类,并将更大的模型传递给查看,以便我可以访问所有类:

@model SearchScrapClass
@using(Html.BeginForm()) {
    @Html.EditorFor(o => o.WClass.link)
    ...
}

请推荐一个方法

谢谢

【问题讨论】:

  • 创建一个将所有三个模型联系在一起的视图模型并将视图键入该视图模型。
  • 我很困惑为什么你有 3 个看起来都一样的不同类?为什么不只使用同一类的 3 个不同实例?
  • @hermiod :实际上我展示的逻辑看起来很相似[稍作修改],但它们获取 url 和内容的来源不同。所以我需要不同的课程。
  • @Brian 是正确的。在 MVC 中执行此操作的“正确”方法是创建一个包含这三个类的 ViewModel。这些类是数据模型。 ViewModel 是另外一回事,它应该包含您的视图正确渲染所需的一切。

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


【解决方案1】:

查看元组教程http://www.dotnetperls.com/tuple 或这个http://msdn.microsoft.com/en-us/library/system.tuple(v=vs.110).aspx

喜欢控制器:

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

还有观点:

@model 元组

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

【讨论】:

    【解决方案2】:
    SearchScrapClassViewModel model = new SearchScrapClassViewModel
    {
        ....add in your logic to fill your class objects here
    
    
    }
    

    我们在此处应用什么逻辑“ ....在此处添加您的逻辑以填充您的类对象”

    【讨论】:

      【解决方案3】:

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

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

      然后在你的控制器中实例化新的视图模型

      SearchScrapClassViewModel model = new SearchScrapClassViewModel
      {
          ....add in your logic to fill your class objects here
      
      
      }
      
      return view(model);
      

      然后在您的视图中添加视图模型的使用。

      @using SearchScrapClassViewModel
      

      【讨论】:

      • 您能否详细说明一下观点。如何在视图中单独访问每个元素 w、s、y?
      【解决方案4】:

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

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

      【讨论】:

      • 那么你如何在视图中接收/使用该类?
      • Brian 进一步解释了这一点,您可以使用 Modal 来访问每个类,例如@Model.SearchScrapClass, Modal.WClasss
      猜你喜欢
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多