0

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

我首先在类 tables.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 的一列。

有人可以帮我吗?谢谢!

4

2 回答 2

1

您的 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 循环,因为那样你就需要反射,而且我怀疑该页面的运行速度会非常快。

于 2012-12-19T19:51:41.620 回答
0

我认为这两个类都应该是模型,因为它们显然是数据库中表的表示。然而,类酒吧我认为它不是。我认为你的结构应该这样组织:产品(模型类),类别(模型类)=栏(模型集合类)。因此,与其将两个类都添加为类 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 返回到您的视图。

于 2012-11-30T12:17:34.580 回答