1

在使用 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 中。

4

1 回答 1

1

我实现这一点的方法是保留一个隐藏字段,以跟踪添加或删除并且是集合的一部分的字段。
这样,每当您删除集合中的元素时,您只需要更新 JSON 并且在回发它时读取 json 并相应地更新集合
以序列化或反序列化,JSON您可以使用内置JavaScriptSerializernewtonsoft.json

于 2013-02-24T08:25:38.380 回答