MVC Post к другому действию - PullRequest
2 голосов
/ 09 февраля 2010

Пролив к деталям ...

Я работаю над личным проектом, в основном это список задач. В любом случае; Мне удалось получить стандартную функциональность добавления, редактирования, удаления задач; Теперь я застрял на чем-то, что, как я знаю, должно быть очень простым. Я хотел бы, чтобы пользователи могли принять задачу со страницы сведений, теперь я могу легко добавить эту опцию в выпадающий список и позволить пользователю выбрать ее и затем сохранить; НО я хотел бы просто предоставить ссылку, чтобы они могли щелкнуть «Принять задачу», эта ссылка затем переходит к моему действию контроллера и извлекает задачу, а затем обновляет поле TaskStatus.

Это мой контроллер действия

        //
    // TaskStatus Updates
    [AcceptVerbs(HttpVerbs.Post), Authorize]
    public ActionResult AcceptTask(int id)
      {
        Task task = taskRepository.GetTask(id);

        try
        {
            task.TaskStatus = "Accepted";
            taskRepository.Save();
            return RedirectToAction("Details", new { id = task.TaskId });
        }
        catch (Exception)
        {

            throw;
        }

    }

Итак, как мне теперь вызвать это действие в моем представлении «Детали»?

Ответы [ 3 ]

2 голосов
/ 09 февраля 2010

Будет работать небольшая форма, содержащая кнопку, которая отправляет сообщение обратно в действие AcceptTask. Это может быть даже форма AJAX, если хотите.

<% using (Html.BeginForm("accepttask","task",new { id = Model.TaskId })) { %>
    <input type="submit" value="Accept Task" />
<% } %>
1 голос
/ 09 февраля 2010

Ссылка не должна выполнять никаких действий по определению. Это приводит к странным проблемам: что происходит, когда Google сканирует ваш сайт? Что происходит, когда кто-то обновляет страницу? Что происходит, когда кто-то закладывает страницу в закладки?

Действия, которые изменяют содержимое, обычно выполняются методом get after post. Сначала опубликуйте действие, которое что-то меняет (AcceptTask), а затем перенаправьте на страницу, где отображается результат. В вашем случае я бы предложил получить список задач с сообщением об успехе. Чтобы сообщение было доступно после перенаправления, используйте Tempdata.

1 голос
/ 09 февраля 2010

Ссылка (<a>) не может опубликовать форму, поэтому у вас есть три варианта:

  1. Вместо этого используйте кнопку;
  2. Вместо этого используйте <input type="image">, который вы можете изящно выглядеть как ссылка;
  3. Используйте JavaScript, чтобы сделать это.

Уже опубликован ответ для # 1, который легко изменить на # 2. Я опубликую пример jQuery для # 3, хотя вы можете использовать любую библиотеку JS для этого:

<a id="acceptTaskLink" href="#">Accept</a>
<span id="accepted" style="display: none">Accepted</span>
...
<script type="text/javascript">
    $('#acceptTaskLink').click(function() {
        $.post('/site/task/accept',
            function(result) {
                $('#acceptTaskLink').hide();
                $('#accepted').show();
            });
    });
</script>

Этот сценарий отправляет Ajax-сообщение контроллеру, а затем, после успешной отправки, преобразует ссылку «Принять» в обычный текст «Принят» (скрывая ссылку и показывая элемент подтверждения, который предположительно находится в том же месте ).

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