Сделайте запрос HttpPost для метода действия в контроллере ASP.NET MVC - PullRequest
0 голосов
/ 09 декабря 2011

Я пытаюсь создать функциональность, в которой мне нужно создать профиль кандидата в нашем приложении. Существует два шага / пользовательского интерфейса для создания профиля кандидата:

1 - Создать шаблон ... где пользователь вводит информацию о кандидате.

2 - Шаблон предварительного просмотра ... где пользователю будет показан предварительный просмотр того, как будет выглядеть его профиль после добавления профиля в нашу систему.

Я уже создал представления для поддержки этих интерфейсов через контроллер под названием «CandidateController», который содержит несколько методов действия:

1- [HttpGet] «Создать», который возвращает шаблон «Создать».

[HttpGet]
public ViewResult Create()

2- [HttpPost] «Предварительный просмотр», который возвращает шаблон предварительного просмотра.

 [HttpPost]
 public ActionResult Preview(ProfileViewModel viewModel)

Теперь мне нужно реализовать кнопку / ссылку в шаблоне Create, которая будет вызывать метод действия [HttpPost] Preview в контроллере.

Вызов Мне также интересно, есть ли способ, чтобы связыватель модели загружал для меня объект ViewModel, если я могу вызвать метод действия HttpPost Preview из первого шаблона создания.

Я ищу предложение / помощь, как лучше всего реализовать такую ​​функциональность.

Любая помощь будет высоко оценена.

Ответы [ 2 ]

3 голосов
/ 09 декабря 2011

Задача Мне также интересно, есть ли способ, которым модель связывает загрузит объект ViewModel для меня, если я смогу вызвать HttpPost Метод действия предварительного просмотра из первого шаблона создания.

Вы можете использовать либо стандартную форму, либо вызов 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>
}
1 голос
/ 12 декабря 2011

ОК, так что вот варианты, которые мне пришлось обойти:

  • Как предположил Дарин, вы можете пойти ненавязчивым путем, используя $ .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.И спасибо Дарину за то, что он направил меня к отправной точке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...