在使用 webforms 很长一段时间后,我正在尝试学习 ASP.net MVC,如果我混淆了,请道歉。我无法超越每个模型的简单编辑页面结构。我有员工,他们被外部引用到项目,我想在一页上编辑这一切。
我有一个员工模型:
public class Employee
{
public string UserID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public List<ProjectXref> Projects { get; set; }
}
这是我的 ProjectXref 模型:
public class ProjectXref
{
public Project Project { get; set; }
public string Role { get; set; }
}
我为 ProjectXref 创建了一个编辑器模板:
@model Relationships.Models.ProjectXref
<tr>
<td><span class="h3"> @Model.Project.ProjectName </span> </td>
<td>@Html.EditorFor(model => model.Role)</td>
<td>
@Html.HiddenFor(model => model.Project.ProjectKey)
<a class="btnDel" > </a>
</td>
</tr>
...在我的员工编辑视图中,我只是使用 EditorFor 为与我的员工关联的每个项目呈现 tr 行。
@Html.EditorFor(model => model.Projects)
我现在不知道该怎么处理这些。我开始使用一些 jQuery 来删除我的 ProjectXref:
$(".btnDel").live("click", function () {
$(this).parents('tr').remove();
return false;
});
看起来不错,但如果我删除第一个项目然后提交,以下项目都不会出现在我的帖子中。我认为这与正在发生的任何魔术绑定有关。我的“Projects_0__Title”字段丢失,因此 MVC 跳过尝试绑定其他任何内容。
我的目标:我想在我的页面上动态修改我的项目列表,这意味着能够删除项目、添加新项目或编辑项目(更改员工相对于项目的角色)。我试图让 MVC 这样做是错的吗?在我看过的教程中,大多数人会让你编辑和添加新的 ProjectXrefs,每个都有单独的页面,但这似乎是糟糕的 UI。
在我看来,我希望能够将新的 ProjectXref 编辑器 HTML 添加到我的表单中,并且在发布表单时,让 ASP.net 将其识别为新的 ProjectXref 并将其绑定。同时,如果我删除与现有 ProjectXref 关联的字段,我希望 ASP.net 能够识别我的 ProjectXrefs 之一的字段现在丢失,因此删除该 ProjectXref。我是否使用 EditorTemplates 走错了路?
编辑:我的解决方案
感谢@Parv Sharma,我最终为我的班级创建了一个新属性:
public string ProjectsJson
{
get { return JsonConvert.SerializeObject(Projects); }
set { Projects = JsonConvert.DeserializeObject<List<ProjectXref>>(value); }
}
然后我将它作为隐藏添加到我的视图中:
@Html.HiddenFor(model => model.ProjectsJson)
然后我使用 AngularJS(无论如何都要学一个)从我的领域读取 JSON 并将其呈现在我的 UI 中。