我的列表中的值到处都是0

时间:2013-03-06 18:32:41

标签: c# razor asp.net-mvc-4

控制器:

public ActionResult Index()
        {
            return View(db.Profits.ToList());
        }

public ActionResult Create(Profits profits)
{
    {
        var user = db.UserProfiles.FirstOrDefault(x => x.UserId == WebSecurity.CurrentUserId);
        var category = db.Categories.FirstOrDefault(o => o.Id == profits.CategoryID);
        var profit = new Profits
        {
            Value = profits.Value,
            Description = profits.Description,
            DateInput = profits.DateInput,
            CategoryName = category,
            User = user
        };
        db.Profits.Add(profit);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
}

index.cshtml:

model IEnumerable<WebHFM.Models.Profits>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CategoryID)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Value)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Description)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.DateInput)
        </td>

在MSSQL Server中,我看到了正确的信息。名为=CategoryName_id的列的表利润具有正确的数据(1或2或表格Categories的主键)但在我的索引视图中我应该看到Name(类型模型)我到处都看到只有0号。

基本上在我的View我希望看到一个包含Profits列名称的HTML表格模型:
  CategoriesvaluedescriptiondataInput

2 个答案:

答案 0 :(得分:1)

在您的控制器中,您可能需要:

public ActionResult Index()
{
    return View(db.Profits.Include("Categories").ToList());
}

在您看来,您需要:

model IEnumerable<WebHFM.Models.Profits>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CategoryName.Name)
        </td>
    </tr>

你之所以选择零,是因为你有这条线:

@Html.DisplayFor(modelItem => item.CategoryID)

CategoryID不是数据库中的属性,它是模型中的属性,因此当您从数据库中提取时,此属性不会使用值进行更新。 int的默认值为0,因此您得到零。即使你确实填充了这个值,你只需要到处都有数字,而不是类别名。这样:

@Html.DisplayFor(modelItem => item.CategoryName.Name)

将通过从您的对象获取实际的类别名来解决您的问题。

令人困惑的是,你已经将Profits.CategoryName命名为Profits.Category,当它应该是Profits.Category或其他东西时,表明它实际上不是字符串而是对象。

最后,您可能需要也可能不需要Include(),它只取决于您的dbcontext何时被处置,但可能您需要它。我现在把它作为Include("Categories"),但我不确定你的导航属性的名称究竟是什么,它可能是不同的东西。如果它不是“类别”而我不得不猜测,我猜是Include("CategoryName1")

答案 1 :(得分:0)

你的lambda表达式是个问题。首先在foreach中尝试一些基本的HTML:

    <td>
        @item.CategoryID
    </td>