从我当前的视图中使用(显示)来自另一个模型的数据

时间:2016-02-19 16:14:59

标签: asp.net asp.net-mvc razor

没有要显示的代码。我只想了解一些事情。我已经做了一些MVC代码(我有一个模型,我要求Visual Studio创建Controller和View)。 每个视图只有" ONE MODEL"相关。因此,使用Razor,我可以显示此模型的数据。我玩我的代码,直到现在我都明白了。

但...... 同样的观点,我们如何与另一个模型合作?

对我来说,模型只是一个具有属性等的类。我的数据库有一个等效的数据表"对于每个型号。我可以用Entity Framework操纵它......没问题。但是,我需要在SAME VIEW中使用来自不同模型(不同表)的DATA,Visual Studio不允许我在视图中使用另一个MODEL。

策略是什么? (或者我可能不明白......)

谢谢。

3 个答案:

答案 0 :(得分:3)

策略是构建视图模型,构建要显示的模型,并表示您需要使用的数据。

示例:

您有这些类,它们代表您的数据库:

public class FootballTeam{
     public string Name{get;set;}
     public string Logo{get;set;}
}

public class FootballGame{
     public Datetime Date {get;set;}
     public string Competition {get;set;}
}

public class Referee{
     public string Name{get;set;}
     public int Experience {get;set;}
}

要显示有关比赛游戏的信息,您可以为此类创建一个视图模型,如有必要,该类可以引用您商业模型的某些类:

public class GameViewModel{
     [DisplayName("Home team")]
     public FootballTeam HomeTeam{get;set;}

     [DisplayName("Referee")]
     public Referee Referee{get;set;}

     [DisplayName("Visitor team")]
     public FootballTeam VisitorTeam {get;set;}

     [DisplayName("Comments")]
     public List<string> RedactionComments{get;set;}
}

创建一个将使用此GameViewModel的视图。 通常,当您创建一个新的MVC项目时,您的表示层中有一个名为“ViewModels”的文件夹,其中包含一些像这样的类。

此方法允许将您的业务模型与您的演示模型分开,这两种情况完全不同。

这里有很好的答案:What is ViewModel in MVC?

答案 1 :(得分:0)

您可以将剃刀视图的模型类型更新为您想要的任何类型。只要从操作方法传递该类型,它就会起作用。

只需打开剃刀视图,然后更改模型所在的行。

@model Customer

现在您需要确保从操作中传递Customer对象

public ActionResult Create()
{
   return View( new Customer());
}

同样,在创建视图时,您无需在“对话框”框中选择“模型”类型。您可以将其保留为空并根据需要将其添加到剃刀视图中(如上所示)

如果要从2个不同的表中提取数据,请创建一个具有视图所需属性的新视图模型,并将其用作视图的模型类型。

答案 2 :(得分:0)

你应该使用ViewModal创建一个ViewModal,它将根据我们的需要组合两个模态属性

ViewModel包含强类型视图中表示的字段。它用于将数据从控制器传递到具有自定义模态的强类型视图

了解如何在下面的链接MVC中使用View Modal -

See In Image How View Modal Works

Understand View Modal In MVC

演示如何在MVC中使用视图模块的代码

<强> Product.cs

 public class Product
    {
        public Product() { Id = Guid.NewGuid(); }
        public Guid Id { get; set; }
        public string ProductName { get; set; }

        public virtual ProductCategory ProductCategory { get; set; }

    }

<强> ProductCategory.cs

public class ProductCategory
{
    public int Id { get; set; }
    public string CategoryName { get; set; }

    public virtual ICollection<Product> Products { get; set; }
}

<强> ProductViewModel.cs

  public class ProductViewModel
    {
        public Guid Id { get; set; }

        [Required(ErrorMessage = "required")]
        public string ProductName { get; set; }

        public int SelectedValue { get; set; }

        public virtual ProductCategory ProductCategory { get; set; }

        [DisplayName("Product Category")]
        public virtual ICollection<ProductCategory> ProductCategories { get; set; }
   }