Пример ASP.NET MVC для редактирования нескольких дочерних записей

Кто-нибудь знает какие-либо примеры или учебные пособия MVC-представления, которые показывают родительские/дочерние данные в одной форме и разрешают редактирование всех дочерних записей?

Например, скажем, у меня есть таблица людей, а другая - те, которые у них есть. Одна из форм, я хочу показать каждому транспортному средству для данного человека и сделать элементы данных доступными для редактирования (например, номерного знака, цвета автомобиля и т.д.) В случае ошибок. Я не хочу переходить к отдельной форме редактирования для каждого автомобиля.

Мои попытки до сих пор довели меня до такой степени, что я могу отображать данные, но я не могу заставить его отправить обратно на контроллер. Я пытался сузить проблему, насколько я мог здесь, но я все еще не понимаю ее, и я думаю, что более широкий пример может быть в порядке. Любые идеи?

Ответ 1

Вы можете попробовать что-то вроде этого.

Предположим, что у вас есть этот объект:

public class Vehicle
{
    public int VehicleID { get; set; }
    public string LicencePlate { get; set; }
    public string Color { get; set; }
}

И это ваше действие с контроллером, которое вы будете использовать для редактирования информации о транспортном средстве (где вы разместите форму):

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditVehicles(int Owner, Vehicle[] vehicles)
{
    //manipulate the data, then return back to the list
    return RedirectToAction("YourAction");
}

Затем вы должны установить свою форму следующим образом:

<!--have a form for each person, listing their vehicles-->
<form action="/EditVehicles" method="post">
    <input type="hidden" name="Owner" value="25" />
    <input type="hidden" name="Vehicles[0].VehicleID" value="10" />
    <input type="text" name="Vehicles[0].LicencePlate" value="111-111" />
    <input type="text" name="Vehicles[0].Color" value="Red" />
    <input type="hidden" name="Vehicles[1].VehicleID" value="20" />
    <input type="text" name="Vehicles[1].LicencePlate" value="222-222" />
    <input type="text" name="Vehicles[1].Color" value="Blue" />
    <input type="submit" value="Edit" />
</form>

Это поможет DefaultModelBinder правильно привязать данные формы к вашей модели в вашем контроллере. Таким образом, Response.Write(vehicles[1].Color); на вашем контроллере будет печатать "Синий".

Это очень простой пример, но я уверен, что вы поняли эту идею. Дополнительные примеры о привязке форм к массивам, спискам, коллекциям, словарям см. Здесь .

Ответ 2

Я думаю, что лучше всего обойти это, используя сообщения AJAX. Всякий раз, когда пользователь нажимает кнопку отправки, вы можете подключиться к этому событию, создать массив JSON из того, что вы хотите сохранить и отправить.

Другим способом, конечно, является получение всей информации из объекта "FormCollection" в действии POST. Вам просто нужно перебрать все ключи, проанализировать данные и затем обработать их.