Сделайте запрос HttpPost для метода действия в контроллере ASP.NET MVC
Я пытаюсь создать функциональность, где мне нужно создать профиль кандидата в нашем приложении. Существует два шага / пользовательского интерфейса для создания профиля кандидата:
1 - Создать шаблон... где пользователь вводит информацию о кандидате.
2 - Шаблон предварительного просмотра... где пользователю будет показан предварительный просмотр того, как будет выглядеть его профиль, как только он добавит профиль в нашу систему.
Я уже создал представления для поддержки этих интерфейсов через контроллер под названием "CandidateController", который содержит несколько методов действия:
1- [HttpGet] "Создать", который возвращает шаблон "Создать".
[HttpGet]
public ViewResult Create()
2- [HttpPost] "Предварительный просмотр", который возвращает шаблон предварительного просмотра.
[HttpPost]
public ActionResult Preview(ProfileViewModel viewModel)
Теперь мне нужно реализовать кнопку / ссылку в шаблоне Create, которая будет вызывать метод действия [HttpPost] Preview в контроллере.
Задача Мне также интересно, есть ли способ, которым связыватель модели загрузит для меня объект ViewModel, если я смогу вызвать метод действия HttpPost Preview из первого шаблона создания.
Я ищу предложение / помощь о том, как наилучшим образом достичь такого рода функциональности.
Любая помощь будет высоко оценена.
2 ответа
Задача Мне также интересно, есть ли способ, которым связыватель модели загрузит для меня объект ViewModel, если я смогу вызвать метод действия HttpPost Preview из первого шаблона создания.
Вы можете использовать либо стандартную форму, либо вызов AJAX, чтобы вызвать действие Preview POST и передать все значения свойств модели представления. Все значения, которые вы передаете в этом запросе, будут значениями, которые будут связаны связывателем модели по умолчанию. Вот статья, объясняющая, как механизм связывания модели по умолчанию ожидает именования параметров для более сложной структуры, такой как списки и словари.
Пример с AJAX:
$.ajax({
url: '@Url.Action("Preview")',
type: 'POST',
data: { Prop1: 'value 1', Prop2: 'value 2' },
success: function(result) {
// TODO: do something with the result returned from the POST action
}
});
Если вы не хотите использовать AJAX, вы можете использовать стандартную форму со скрытыми полями:
@using (Html.BeginForm())
{
@Html.Hidden("Prop1", "value 1")
@Html.Hidden("Prop2", "value 2")
...
<button type="submit">Preview</button>
}
Итак, вот варианты, которые мне пришлось обойти:
- Как предположил Дарин, вы можете пойти ненавязчивым путем, используя $.ajax(параметры), однако дело в том, что вы можете пойти по этому пути, только если вы хотите выполнить частичное обновление страницы или если вы хотите работать над обновлением / дампом новый HTML в том же виде.
И если вы не хотите использовать Ajax, вместо использования скрытых полей, вы можете просто использовать свойство TempData в MVC, вот как я реализовал свою целевую функциональность, используя TempData. psbelow...
[HttpPost] public ActionResult Create(ViewModel viewModel) { this.TempData["profile"] = viewModel; return RedirectToAction("Preview"); } public ActionResult Preview() { if (TempData["profile"] != null) { return View((ViewModel)TempData["profile"]); } // Handle invalid request... return null; }
Таким образом, это решение работало довольно хорошо для меня, где я не писал ни JavaScript, ни ненужного HTML. И спасибо Дарину за то, что он направил меня к отправной точке.