我有一个具有一对多关系的类,并尝试在视图中显示虚拟对象。我对MVC和EF相当新,所以这可能很简单。
我正在尝试在“请求/创建”操作视图上显示PODObject的下拉列表。
以下是模型
public class PODObject
{
public int PODObjectID { set; get; }
public string name { set; get; }
public string CustomAttribute1 { set; get; }
public string CustomAttribute2 { set; get; }
public string CustomAttribute3 { set; get; }
public string CustomAttribute4 { set; get; }
public string CustomAttribute5 { set; get; }
public virtual ICollection<BookingObject> BookingObjectspublic { set; get; }
}
public class RequestsQueueObject
{
// Request Attributes
public int RequestsQueueObjectID { set; get; }
public string CustomAttribute1 { set; get; }
public string CustomAttribute2 { set; get; }
public string CustomAttribute3 { set; get; }
public string CustomAttribute4 { set; get; }
public string CustomAttribute5 { set; get; }
public int PODObjectID { set; get; }
public virtual PODObject PODObject { set; get; }
}
这是控制器创建动作
public ActionResult Create([Bind(Include="RequestsQueueObjectID,POCPODAccess,CustomAttribute1,CustomAttribute2,CustomAttribute3,CustomAttribute4,CustomAttribute5")] RequestsQueueObject requestsqueueobject)
{
if (ModelState.IsValid)
{
db.RequestsQueueObjects.Add(requestsqueueobject);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(requestsqueueobject);
}
这是cshtml
<div class="form-group">
@Html.DropDownListFor(model => model.PODObject, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.PODObject)
@Html.ValidationMessageFor(model => model.PODObject)
</div>
</div>
答案 0 :(得分:0)
也许我错了,但你的PODOObject
看起来不像是List,数组或者其他什么,所以你不能真正将它用作下拉列表的来源......
答案 1 :(得分:0)
我认为您正在寻找的是能够从现有PODObject
个实例列表中进行选择,以设置为RequestQueueObject
的相关项目。你有一些问题需要清理。
您在RequestQueueObject
上有一个属性来保存与PODObject
的关系的ID,但目前尚未使用此属性。实体框架的约定是查找具有命名模式[RelatedProperty][RelatedClassIdProperty]
的属性。在您的方案中,这将是PODObjectPODObjectID
或PODObject_PODObjectID
。您可以通过将ForeignKey
属性添加到PODObjectID
属性来清除它:
[ForeignKey("PODObject")]
public int PODObjectID { get; set; }
Html.DropDownListFor
需要IEnumerable<SelectListItem>
作为其第二个参数,您目前没有这个参数。 MVC不会为你做这件事;你需要自己创建选择列表。理想情况下,您将使用视图模型作为属性,但目前您可以使用ViewBag
:
在您的行动中
var podObjectChoices = db.PODObjects.Select(m => new SelectListItem
{
Value = m.PODObjectID,
Text = m.name
});
ViewBag.PODObjectChoices = podObjectChoices.ToList();
return View();
在您的视图中
@Html.DropDownListFor(m => m.PODObjectID, (IEnumerable<SelectListItem>)ViewBag.PODOBjectChoices, new { @class = "control-label col-md-2" })
我刚刚在上面的示例代码中介绍了这一点,但您无法通过下拉列表直接设置PODOBject
。相反,您为关系设置了外键属性PODOBjectID
,实体框架将连接它。