Использование Ajax v Forms - PullRequest
       12

Использование Ajax v Forms

0 голосов
/ 26 ноября 2009

У меня есть таблица с каждой строкой, содержащей задачу. Я хотел бы иметь столбец со ссылками, позволяющими пользователю переключать завершенный статус задачи.

Поскольку это изменение данных, я разрешаю вызывать только действие изменения из сообщения. То есть У меня есть ActionFilter [AcceptVerbs (HttpVerbs.Post)].

Для этого, в свою очередь, требуется форма в каждой строке таблицы. Это работает, но везде есть ужасная кнопка.

Я думаю, что смог бы достичь требуемой безопасности данных, используя Ajax.ActionLink и проверяя в действии, чтобы убедиться, что это вызов ajax.

В настоящее время у меня есть что-то вроде

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult ToggleToDoItem(int Id, int? page)
    {
        //update completed status
        ...

        return ToDoItemsPv(null, page);
    }

Я хочу изменить его на public ActionResult ToggleToDoItem (int Id, int? page) { if (HttpContext.Request.IsAjaxRequest ()) { // обновить завершенный статус ...

            return ToDoItemsPv(null, page);
        }
        else
        {
            return Redirect(some error page);
        }
    }

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

Это безопасно? Это хорошая практика?

Спасибо

Ответы [ 2 ]

1 голос
/ 26 ноября 2009

Это кажется мне немного отсталым.

Моя немедленная реакция заключается в том, почему вы не используете jQuery для выполнения обратной передачи, обновления данных в БД, возврата флага или чего-либо еще и просто обновления этого бита экрана, который нуждается в этом?

Нет веской причины, по которой вы не можете использовать частичную обратную передачу jQuery здесь, и это избавило бы от необходимости иметь форму для каждого элемента данных.

Я бы даже зашел так далеко, что вернул PartialView, который, в случае успеха jQuery, добавил бы или заменил существующий контент.

EDIT

Я делаю частичные постбэки, как это;

$.post("/Articles/jQueryAddComment", { commentText: commentText, id: id},  function(newCommentListHTML) {
  // the newCommentListHTML is a partial view that I return
  // and i simply replace the contents of the comment list with
  // this new content.
});

My C #;

public ActionResult jQueryAddComment(string commentText, int id)
{
  //get data

  return PartialView("CommentLisr");
}

Вам нужно будет адаптировать материал jQuery, чтобы не заменять весь лот или что-то еще, что вы хотите заменить.

JQuery

Есть несколько классных команд jQuery, с которыми вам захочется поиграть.

Если вы добавляете новый частичный вид, используйте ключевое слово (append). Если вы заменяете его, просто замените содержимое ограничивающего div новым содержимым.

<div class="BoundingData">
</div>

$('.BoundingData').html(NewHTMLFromPostback);
0 голосов
/ 27 ноября 2009

Ajax.ActionLink включает опцию для установки метода http, чтобы он мог выполнять POST

например

<%= Ajax.ActionLink(c.Completed ? "Mark uncompleted" : "Mark completed", "ToggleToDoItem", new { Id = c.Id}, new AjaxOptions { UpdateTargetId = "partial", HttpMethod = "POST" })%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...