Вы не можете передать всю модель с 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" })