Ситуация: у меня есть страница ASP.NET Razor, которая построена из частичных.
Некоторые из них находятся в циклах, перебирающих коллекции, которые являются членами модели представления главной страницы.Эти повторяющиеся партиалы используют типы элементов коллекций в качестве собственной модели представления.
Таким образом, главная страница Razor выглядит примерно так:
@model MyProject.MainViewModel
@*Other stuff...*@
@foreach (Subtype v in Model.SubViewModel)
{
Html.RenderPartial("MyPartial", v);
}
А частичное выглядит так:
@model Subtype
@Html.HiddenFor(t=>t.ParentViewModelID)
@Html.EditorFor(t=>t.Field1)
@Html.EditorFor(t=>t.Field2)
Это все хорошо работает при начальной загрузке страницы, но мне интересно, как мне обработать , динамически добавляя эти партиалы через AJAX .
Предположим, пользователь нажимает кнопку, которая в конечном итоге предназначена для добавления в одну из этих коллекций моделей представлений.Я могу AJAX вернуться на сервер, отобразить соответствующий фрагмент и вернуть его клиенту:
[System.Web.Mvc.HttpGet]
public ActionResult AddSubtype(int mainViewModelId)
{
var model = new Sub { ParentViewModelID=mainViewModelId};
return PartialView("MyPartial", model);
}
И затем я использую небольшой скрипт, чтобы вставить это в DOM, где он принадлежит:
success: (data) => { $('#subtypeHanger').append(data);},
Кажется, что это работает, за исключением одной большой части: когда я отправляю свою форму, я не вижу данных, связанных с этим динамически добавляемым частичным, в моей модели представления.
Я пытался отладить это, но мне интересно в общих чертах, возможно ли это, или альтернативно, сколько MVC должен абстрагироваться от таких вещей.Очевидно, я могу сделать что-то с помощью JavaScript, чтобы заставить это работать.Есть ли шаблон ASP.NET MVC для этого, который я должен эмулировать, хотя?
РЕДАКТИРОВАТЬ: я упомяну некоторые вещи, которые я пробовал, так как я отправил это:
Управление атрибутами «name» и «id» элементов управления редактированием частичных представлений вручную, чтобы они в конечном итоге выглядели так, как если бы я вкладывал эти элементы управления в основной вид вместо частичного (т. Е. Дольше, стекст и индекс).
Использование класса модели основного вида для частичных чисел.Это заставляет меня переместить петли в частичное.Свойства «name» и «id» выглядят так же, как и в первом # 1, но этот дизайн значительно усложняет процесс возврата частичного из моих вызовов AJAX.
Использование«для» циклов вместо «foreach».Само по себе это не дает того, чего я хочу.
Все это говорит о том, что если № 1 или № 2 - лучший образец для того, что я делаю, возможно, я смогу сделать эторабота.