В основном у меня есть форма, к которой я динамически добавляю объекты. Я делаю это с AJAX, поэтому могу просто инициализировать объект и вернуть его с JSON. Каждому новому объекту присвоен уникальный GUID, поэтому мы можем идентифицировать каждый объект в коллекции моделей, когда он возвращается в действие.
Однако мне нужно поддерживать не JavaScript, поэтому я пытаюсь написать решение, которое отправит обратно модель и добавит или удалит данный объект из модели. В модели может быть любое количество этих новых объектов, поэтому мне нужно передать несколько вещей, чтобы выяснить, какой объект удалить, прежде чем возвращать модель обратно в представление. Это может быть либо
a) GUID для объекта, который пользователь удалил.
b) Кнопка, на которую нажали, чтобы определить, какой объект удалить.
Проблема в том, что частичное представление является общим, и я хотел бы сохранить его таким образом, поэтому я пытаюсь передать идентифицирующий GUID обратно с помощью кнопки ввода в каждом частичном представлении, но не знаю как. Я легко могу сделать это с помощью JavaScript, потому что я просто удаляю созданный объект AJAX со страницы, прежде чем публиковать его, когда пользователь нажимает на ссылку удаления, но не может понять, как это сделать с отправкой. В основном я хочу сделать что-то вроде этого:
@using (Project.Namespace.Infrastructure.Helpers.HtmlPrefixScopeExtensions.HtmlFieldPrefixScope _scope = Html.BeginCollectionItem())
{
<ul class="ulMedicationsControl">
@Html.ActionLink("Remove This Object", "RemoveObject", null)
@Html.Input("RemoveObject", "Remove This Object", new { Prefix = _scope.Prefix, objectGUID = IdentifyingGUID })
@Html.HiddenFor(m => m.IdentifyingGUID);
<li class="liQuestion">
@Html.MandatoryLabelFor(m => m.myField)
@Html.TextBoxFor(m => m.myField)
</li>
</ul>
<div id="@(_scope.Prefix).ajaxPlaceholder"></div>
}
В контроллере:
[ActionName("FormName")]
[AcceptParameter(Name = "RemoveObject", Value = "Remove This Object")]
public ActionResult RemoveObject(MyParentModel model, string Prefix, string objectGUID)
{
Guid ID = new Guid(objectGUID);
foreach (ObjectModel object in model.objects){
if (object.IdentifyingGUID == ID)
{
model.objects.Remove(object);
break;
}
}
return View(model);
}
Любая помощь, которую я очень ценю, поскольку я просто не могу понять, как это сделать!
EDIT
Также просто для добавления префиксного атрибута просто указывается, где в форме находится объект. Это будет необходимо для того, чтобы я мог найти, через какой список объектов пройти и удалить объект, поскольку в модели может быть несколько списков в разных местах.