【发布时间】:2015-02-04 11:02:14
【问题描述】:
编辑:我想我需要某种视图模型,但我不确定如何处理这种关系。
我正在尝试理解 MVC 4 和 EF Code First,并且我正在尝试映射多对多关系。
我有两节课;
public class Asset
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public virtual ICollection<Category> Categories { get; set; }
}
public class Category
{
public int CategoryId { get; set; }
public string CategoryName { get; set; }
public string Description { get; set; }
public virtual ICollection<Asset> Assets { get; set; }
}
所以我试图让每个资产有多个类别,每个类别可能有多个资产。
在我的创建方法上我有;
public ActionResult Create()
{
var model = new Asset();
model.Categories = _db.Categories.ToList();
return View(model);
}
在我看来,我可以展示这些类别的唯一方法就是说; (注意模型中的大写 M。我不能使用视图中其他地方使用的小写模型)
@model MyProject.Models.Asset
@using (Html.BeginForm("Create", "Assets", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div>
@foreach (var item in Model.Categories)
{
<p>@item.CategoryName</p>
}
</div>
<div class="form-group">
@Html.LabelFor(model => model.Title, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
</div>
</div>
}
调用初始创建时,我可以看到我的资产并且它具有类别。然而,在返回创建方法上,它的值为空。我不知道为什么。我知道我没有做任何事情来编辑视图中的这些类别,我做不到那么远。但我不明白的是为什么我的模型离开了类别,但没有返回。
我的创建返回(这里我的资产类别为空)
// POST: Assets/Create
[HttpPost]
public ActionResult Create(Asset model)
{
if (!ModelState.IsValid)
{
//error, return to view.
return View();
}
try
{
//do stuff
}
catch
{
return View();
}
}
最终在创建资产时,我希望能够列出所有类别并允许选择该新资产将属于哪些类别。如果有人能帮我解决这个问题,你就是我的英雄。但如果我能理解为什么回来的不是我发出的,那将是一个开始。
【问题讨论】:
-
两个表之间的外键关系设置了吗?
-
是的,抱歉,我已更新我的问题以包含它。我在视图中有一些其他字段,我正在尝试修剪问题的语法。
-
返回视图();您没有在 Create Method 中传回模型,这就是您看不到类别的原因。返回视图(模型);
-
在 HttpPost 我还没有。因为在 HttpPost 上,传入它的类别的资产已经为 null,所以我仍然会返回 null。我确实将模型返回到 Get 上的视图,然后我可以在视图中看到它。当它回来时,我只是看不到它们。
标签: c# asp.net-mvc entity-framework