Linhas dinâmicas do MVC 5 com BeginCollectionItem

Qual é a melhor maneira de adicionar / excluir linhas em uma tabela quando um botão é clicado? Eu preciso de linhas criadas a partir de propriedades ChildClass (classe filho é uma lista na classe / modelo principal).

Atualmente, tem uma View (o modelo é MyMain) que faz referência a uma Vista Parcial usando RenderPartial.

A vista parcial exibe as propriedades do modelo, uma classe chamada MyChild, que é uma lista de objetos no MyMain.

Eu quero ter botões de adição e exclusão para adicionar dinamicamente as linhas que são mantidas na exibição parcial.

Então, adicione MyChild repetidamente para mais linhas na lista. Isso é possível? Ou não devo usar visualizações parciais para isso?

Código atualizado

Abaixo estão as classes e visualizações atuais com as quais estou trabalhando, estou tentando implementar o ajudante BeginCollectionItem, mas estou obtendo uma referência nula onde estou tentando carregar a exibição parcial, apesar da instrução if dizendo para criar uma nova instância da classe filho, se não existe - por que isso está sendo ignorado?

Vista principal

    @using (Html.BeginForm())
{
    <table>
        <tr>
            <th>MyMain First</th>
            <th>MyChild First</th>
        </tr>
        <tr>
            <td>
                @Html.EditorFor(m => m.First)
            </td>
            <td>
                @if (Model.child != null)
                {
                    for (int i = 0; i < Model.child.Count; i++)
                    {
                        Html.RenderPartial("MyChildView");
                    }
                }        
                else
                {
                    Html.RenderPartial("MyChildView", new MvcTest.Models.MyChild());
                }       
            </td>
        </tr>
        @Html.ActionLink("Add another", "Add", null, new { id = "addItem" })
    </table>
}

Vista parcial

@model MvcTest.Models.MyChild

@using (Html.BeginCollectionItem("myChildren"))
{
    Html.EditorFor(m => m.Second);
}

Modelos

public class MyMain
{
    [Key]
    public int Id { get; set; }
    public string First { get; set; }
    public List<MyChild> child { get; set; }
}

public class MyChild
{
    [Key]
    public int Id { get; set; }
    public string Second { get; set; }
}

Controlador

public class MyMainsController : Controller
{
    // GET: MyMains
    public ActionResult MyMainView()
    {
        return View();
    }

    [HttpPost]
    public ActionResult MyMainView(IEnumerable<MyChild> myChildren)
    {
        return View("MyMainView", myChildren);
    }

    public ViewResult Add()
    {
        return View("MyChildView", new MyChild());
    }
}

questionAnswers(2)

yourAnswerToTheQuestion