繁体   English   中英

MVC4,C#,在一个视图中从两个表中检索数据

[英]MVC4, C#, retrieve data from two tables in one View

我是MVC的新手,我使用MVC4,而C#的新手。 我想在一个视图中从两个表中检索数据:tblProduct和tblCategory。 在该视图中,我想从tblCategory列获取“名称”列,并从tblProduct获取所有列。

我首先在类table.cs中的代码中定义了表:

public class tblCategory 
{
        //Primary Key
        [Key]
        [ScaffoldColumn(false)]
        public int CategoryId { get; set; }

        [MaxLength(160)]
        public string Name { get; set; }
        etc...
}

public class tblProduct {
        //Primary Key
        [Key]
        [ScaffoldColumn(false)]
        public int ProductId { get; set; }

        //Foreign Key
        public int CategoryId { get; set; }
        [ForeignKey("CategoryId")]
        public virtual tblCategory tblCategorys { get; set; }

        [MaxLength(500)]
        public string MainImageFileName { get; set; }
        [MaxLength(160)]
        public string Name { get; set; }

        ect...
}

我的模型类bar.cs:

Namespace xx.Models
    public class bar {
        public tblProduct product { get; set; }
        public tblCategory category { get; set; }
    }

我如何在Controller中定义Index类? 这样我就可以将数据从模型栏发送到视图中。

public ActionResult Index(){
  //How to define this?
}

以及如何建立视图? @model xx.Models.bar

但是我想在我的视图中为tblProduct中的所有列使用一个Foreach循环。 和tblCategory中的一列。

有人可以帮我吗? 谢谢!

您的Index动作应建立您的Bar类的实例

public ActionResult Index(){
    var b = new bar();
    b.product = some loading code;
    b.category= some loading code;
    return View(b);
}

您的Index.cshtml需要使用相同模型的实例

@model ProjectName.xx.Models.bar

<div class="editor-label">
    @Html.LabelFor(model => model.category.Name)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.category.Name)
    @Html.ValidationMessageFor(model => model.category.Name)
</div>

@* just duplicate this once for each property you want from product *@
<div class="editor-label">
    @Html.LabelFor(model => model.product.Name)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.product.Name)
    @Html.ValidationMessageFor(model => model.product.Name)
</div>

我不会在产品的属性上使用for循环,因为那样的话您需要反思,而且我怀疑该页面的运行速度会很快。

我认为这两个类都应该是模型,因为它们显然是数据库中表的表示。 但是我认为不是班级吧。 我认为您的结构应该这样组织:product(模型类),category(模型类)= bar(模型集合类)。 因此,不要将两个类都添加为Bar类的属性,而应定义将包含这些类但将这些类与公共接口(即IViewModel)绑定的字典。

public interface IViewModel{
  string name {get;set;}
}
public class TblProduct: IVievModel{
 /// your code
}
public class TblCategory: IVievModel{
 /// your code
}
public class Bar{
 private Dictionary<string, IViewModel> viewModels = new Dictionary<string,IViewModel>();
}

现在,在您的ActionResult方法中,您只需将这两个类添加到字典中,然后将此类Bar返回到您的视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM