ASP MVC Как создать редактор для модели, которая имеет дочерние элементы? - PullRequest
4 голосов
/ 25 марта 2011

Я новичок в asp.Я должен написать приложение в MVC, у которого есть база данных, где у меня есть две таблицы.Один родительский стол реализуется один ко многим с дочерним столом.

Parent
-------------
parent_id
name


Children
-------------
children_id
parent_id (foreign key)
name

Когда пользователь хочет создать элемент для родительского стола, редактор должен иметь возможность добавить (создать) дочерний элемент.

Когда пользователь редактирует Parent, он должен иметь возможность удалять / редактировать Children.

Невозможно добавлять / редактировать / удалять Children в отдельном редакторе

Я думаю, что я должен использовать javascriptсоздать дополнительные элементы управления для ребенка.Я могу сделать это, но я не знаю, как сопоставить этот элемент управления HTML для модели?

Я написал это представление:

<script language="javascript" type="text/javascript">
    function add_child() {
        $('#children').append($('<input name="child[' + ++$('#children>input').get().length + ']" />'));
    }
</script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Create Parent</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>


        <div>Children:</div>
        <div id="children">
            @Html.TextBox("child[1]")
        </div>
        <div>
            <input onclick="add_child()" type="button" />
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

Это работает отлично.Но я действительно не знаю, как отобразить этот элемент в моей родительской модели.

Теперь моя модель для создания представления выглядит следующим образом:

public class ParentModel {
    public ParentModel() {
        Children = //... get all children from database
    }

    public string Name { get; set; }
    // this should be an ids of selected children
    public string[] SelectedChildren { get; set; }
    // children to display
    public ICollection<ChildModel> Children { get; set; }

}

public class ChildModel {
    public string Name { get; set; }
}

Как заполнить этот дочерний элемент значениямииз вида?

Контроллер:

public class ParentController : Controller
{
        // show form
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Index() {
            ParentModel model = new ParentModel();
            return View(model);
        }

        // Get Parent and Children
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Index(ParentModel form) {
            // I want to read a form.CreatedChildren
            // but it is Null
            return View();
        }

}

Я хочу прочитать форму. Создано, но это Нуль ...

Ответы [ 2 ]

5 голосов
/ 25 марта 2011

Вы можете оформить следующую запись в блоге . И продолжение о проверке.

0 голосов
/ 25 марта 2011

Если я правильно понимаю вашу модель, вам нужно

// children to display
public ICollection<ChildModel> Children { get; set; }

в вашей родительской модели. В вашем конструкторе ParentModel

Children = new HashSet<ChildModel>();

Что касается заполнения модели данными, которые принадлежат вашему контроллеру. Что-то вроде:

var parents = from p in context.ParentModels
              select p;
Return View(parents);
...