我有一个实体(QuoteSheet),其中包含一个使用EntityFramework加载的子实体(QuoteTask)。不过,我在提交此表单时收到错误消息。用儿童使用EditorTemplate更新实体
我为QuoteSheet实体创建了一个编辑页面,然后使用EditorTemplate编辑QuoteTask子实体。
控制器代码如下:
public ActionResult TestEdit(int Id)
{
var quote = DataContext.QuoteSheets.Where(x => x.ID == Id).FirstOrDefault();
return View(quote);
}
[HttpPost]
public ActionResult TestEdit(Models.QuoteSheet quote)
{
return View(quote);
}
甲剥离下来的视图的版本被如下:
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
@Html.HiddenFor(x => x.JobID);
<div class="sectionHeader">Sheet Details</div>
<div class="sectionContent">
<table>
<tr>
<td width="150">Sheet Desc.</td><td>@Html.TextBoxFor(x => x.Description, new { size = "50" })</td>
</tr>
<tr>
<td>Quantity Required</td><td>@Html.EditorFor(x => x.Quantity)</td>
</tr>
</table>
</div>
<div class="sectionHeader">Tasks</div>
<div class="sectionContent">
<table id="Tasks">
<tr>
<th>Labour Group</th>
<th>Task Description</th>
<th>Total Hrs</th>
<th>Rate</th>
<th>Cost</th>
</tr>
@Html.EditorFor(x => x.QuoteTasks)
</table>
<input type="button" name="AddTasks" id="AddTasks" value="Add" />
</div>
<input type="submit" value="Submit" />
@Html.ValidationSummary()
}
而且EditorTemplate是:
@model Ornavi.Models.QuoteTask
<tr>
<td>@Html.EditorFor(x => Model.LabourGroup)</td>
<td>@Html.EditorFor(x => Model.Description)</td>
<td>@Html.EditorFor(x => Model.TotalHours)</td>
<td>@Html.EditorFor(x => Model.Rate)</td>
<td>@Html.HiddenFor(x => Model.ID)</td>
</tr>
当我提交表单,我收到以下错误:
EntityCollection已经初始化。只应调用InitializeRelatedCollection方法来在对象图的反序列化过程中初始化新的EntityCollection。
这只发生在我使用EditorTemplate时 - 如果我删除了编辑器模板并只提交主实体,它就可以正常工作。
我已经在[httppost] TestEdit函数中放置了一个断点,但在到达此点之前发生异常。
关于如何成功使用EditorTemplate编辑子实体的任何想法?
您是否使用EntityObject派生实体? – 2011-12-20 10:38:34