1

控制器 :

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");
    }
}

索引.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 或我的主键 table Categories),但在我应该看到的索引视图中Name(类别模型)我到处都只看到数字 0。

基本上在我的View我想看到一个 HTML 表格,其中列名来自ProfitsModel:
Categories, value, description,dataInput

4

2 回答 2

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 或其他东西,以表明它实际上不是字符串而是对象。

最后,您可能需要也可能不需要 Include(),它仅取决于您的 dbcontext 何时被释放,但您可能需要它。我目前拥有它,Include("Categories")但我不确定您的导航属性的名称实际上是什么,它可能会有所不同。如果不是“类别”并且我不得不猜测,我会猜测Include("CategoryName1")

于 2013-03-06T21:53:38.007 回答
0

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

    <td>
        @item.CategoryID
    </td>
于 2013-03-06T21:49:39.440 回答