【发布时间】:2012-08-23 21:57:07
【问题描述】:
所以我有以下代码:
@model IEnumerable<My_School_Book.Models.Mark>
@{
ViewBag.Title = "Marks";
}
<div class="row-fluid">
<h1>Assignment Marks:</h1>
@using (Html.BeginForm("Marks", "Assignment", FormMethod.Post, new { @class = "form-horizontal" }))
{
<table class="table table-bordered">
<thead>
<tr>
<th>Student</th>
<th style="width: 50px;">Mark
</th>
<th style="width: 50px;">Total
</th>
<th style="width: 50px;">Weight</th>
</tr>
</thead>
<tbody>
@Html.EditorForModel()
</tbody>
</table>
<div class="form-actions">
<button type="submit" class="btn btn-primary"><i class="icon-checkmark"></i> Save</button>
<a href="@Url.Action("Index", "Assignment")" class="btn btn-primary"><i class="icon-back"></i> Cancel</a>
</div>
}
</div>
如您所见,传递给视图的模型是模型标记的 IEnumerable。
现在我在 Views/Shared 文件夹下有一个 EditorTemplate,名为 Mark:
@model My_School_Book.Models.Mark
<tr>
<td>@Model.Student.FullName</td>
<td>
@Html.TextBoxFor(model => Model.Grade, new { @class = "span12", @style = "min-height: 20px;", @maxlength = "5" })
</td>
<td>
@Model.Assignment.Total
</td>
<td>@Model.Assignment.Weight</td>
</tr>
我的问题是,我可以将我的 EditorTemplate 文件从 Mark 重命名为 AssignmentMarks 吗?我希望它更具体,而不是称为 Marks 的通用名称。
编辑:
在我的 MarkRepository.cs 中
public IEnumerable<Mark> GetAllByAssignmentID(Guid id)
{
return context.Marks.Where(m => m.AssignmentID == id);
}
在我的 AssignmentController.cs 中
public ActionResult Marks(Guid id)
{
IEnumerable<Mark> Marks = markRepository.GetAllByAssignmentID(id).ToList();
return View(Marks);
}
[HttpPost]
public ActionResult Marks(IEnumerable<Mark> viewModel)
{
if (ModelState.IsValid)
{
}
return View(viewModel);
}
在我的 Marks.cshtml 中
@Html.EditorForModel("Mark", "AssignmentMark")
在我的 AssignmentMark.cshtml 中
@model My_School_Book.Models.Mark
<tr>
<td>@Html.DisplayTextFor(model => model.Student.FullName)</td>
<td>@Html.TextBoxFor(model => model.Grade, new { @class = "span12" })</td>
<td>@Html.DisplayTextFor(model => model.Assignment.Total)</td>
<td>@Html.DisplayTextFor(model => model.Assignment.Weight)</td>
</tr>
我在视图上收到的错误现在是:
System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1
【问题讨论】:
-
是的,你可以,在这里看看我的回答:stackoverflow.com/questions/12050109/…。您只需明确调用它,例如 @EditorFor(m =>m.Mark, "AssignmentMarks")
-
好吧,你看,通过调用 @Html.EditorFor(Model, "AssignmentMarks") 我得到一个模型不匹配(它期望 Mark 的单个实体,而不是我传递一个 IEnumerable。并且最重要的是,如果我继续更改我的 EditorTemplate 文件以接受 IEnumerable 当我在 POST 上将我的 viewModel 传递回控制器时,我会得到一个返回类型为 NULL
-
你可以使用foreach,然后为每个项目调用编辑器。对于发布列表中的每个项目必须具有不同的属性 ID(即 Mark.Student.FullName[index]...),您可以看到 stackoverflow.com/questions/11267354/… 用于该场景。
-
@ Html.EditorFor(型号=> model.marks)现在返回此:System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1为什么?
-
您在点击查看之前是否对列表进行了序列化?您的 EF 上下文在页面上不存在,因此之前应该序列化每个对象。顺便提一句。使用 POCO 类和 DbContext 很好。
标签: asp.net asp.net-mvc-3 editortemplates