如何实现不直接链接到数据库的MVC模型

时间:2014-04-24 23:27:14

标签: c# asp.net-mvc asp.net-mvc-5

我正在尝试实现一个视图,该视图显示在显示之前已修改的数据库中的信息。例如,我正在尝试添加标记人工和硬件成本以给出最终价格。问题是我无法使用foreach循环在视图中显示它,因为它是List,我无法将其声明为IEnumerable,因为它不会让我使用Add()功能。这是我的模特,

namespace Myname.Models{
using System;
using System.Collections.Generic;

public partial class Pricing
{
    public List<int> ID { get; set; }
    public List<string> Manufac { get; set; }
    public List<string> Model { get; set; }
    public List<string> Service { get; set; }
    public List<string> Type { get; set; }
    public List<int> Price { get; set; }

}

这是我的控制器中的索引方法,

 private WTEntities db = new WTEntities();

    // GET: /JobInformation/
    [Authorize(Roles = "Employee")]
    public ActionResult Index()
    {
        Pricing prices = new Pricing();
        prices.ID = new List<int>();
        prices.Manufac = new List<string>();
        prices.Model = new List<string>();
        prices.Price = new List<int>();
        prices.Service = new List<string>();

        foreach(var item in db.JobInformations)
        {
            prices.ID.Add(item.ID);
            prices.Manufac.Add(item.Manufac);
            prices.Model.Add(item.Model);
            prices.Service.Add(item.Service);
            prices.Price.Add(((int)item.MarkupCostCents + (int)item.LaborCostCents + (int)item.HardwareCostCents) / 100);
        }
        return View(prices);
    }

这是我的观点,

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Type)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Manufac)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Model)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Service)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Price)
        </td>
    </tr>
}

1 个答案:

答案 0 :(得分:4)

您已根据自己的目标错误地设计了自己的模型。

您应该创建一个如下所示的viewmodel:

public class Pricing
{
    public int ID { get; set; }
    public string Manufac { get; set; }
    public string Model { get; set; }
    public string Service { get; set; }
    public string Type { get; set; }
    public int Price { get; set; }
}

然后在你的控制器中:

var prices = new List<Pricing>();

foreach(var item in db.JobInformations)
{
    var price = new Pricing();
    price.ID = item.ID;
    price.Manufac = item.Manufac;
    price.Model = item.Model;
    price.Service = item.Service;
    price.Price = ((int)item.MarkupCostCents + (int)item.LaborCostCents + (int)item.HardwareCostCents) / 100;

    prices.Add( price );
}

return View(prices);

现在在您的视图中,您可以完全按照您已编写的内容执行操作(只需确保将@model声明更改为List)。