Как передать IEnumerable Model в параметре Html.actionLink - PullRequest
1 голос
/ 16 апреля 2011

У меня есть вопрос. Мне нужно сохранить все значения моей модели.

В index.cshtml у меня есть:

@ модель IEnumerable

Я могу получить все свои значения в foreach, на мой взгляд.

@ foreach (элемент var в Model) { item.ID, item.Name }

Но Мне нужно передать всю мою модель моему контроллеру с ОДНОЙ ссылкой:

html.actionlink ("Сохранить это", Сохранить, ...);

Как я могу это сделать, пожалуйста?

Спасибо

1 Ответ

7 голосов
/ 16 апреля 2011

Вы не можете передать всю модель с GET-запросом, подобным этому.Вы можете использовать форму HTML:

@using (Html.BeginForm("Save", "SomeController"))
{
    @Html.EditorForModel()
    <input type="submit" value="Save It">
}

, где вы определили шаблон редактора для этой модели (~/Views/Shared/EditorTemplates/Item.cshtml), в котором используются скрытые поля:

@model Item
@Html.HiddenFor(x => x.ID)
@Html.HiddenFor(x => x.Name)

Имя и местоположениеэто частичное важно.Он должен находиться в ~/Views/Shared/EditorTemplates, а имя файла должно называться Item.cshtml, если Item - это имя типа вашей коллекции моделей, т.е. IEnumerable<Item>.Шаблон редактора будет выполнен для каждого элемента коллекции и отобразит соответствующие скрытые поля, которые позволят перенести его на сервер.

Эта форма успешно отправит коллекцию элементов следующему действию контроллера:

[HttpPost]
public ActionResult(IEnumerable<Item> model)
{
    ...
}

И вот альтернативный способ продолжить.Если пользователь не должен изменять значения модели в представлении, то вы можете просто использовать какой-то уникальный идентификатор, позволяющий вам повторно выбрать модель из того места, где вы ее изначально выбрали.Так, например:

public ActionResult Index(int id)
{
    IEnumerable<Item> model = ... fetch the model using the id
    return View(model);
}

и в представлении создайте ссылку, передающую этот идентификатор:

@Html.ActionLink("Save It", Save, new { id = "123" })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...