控制器:
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表格模型:
Categories
,value
,description
,dataInput
答案 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>